让我们开始吧。我已经用Javascript创建了一个可以工作的“惯性照相机”,虽然我对Javascript很有经验,但我对JS中的原型开发没有经验。我正在尝试使用初始函数构造函数按如下方式重新构造我的相机:
function Inertia(subject, clickable) {
this.subject = document.getElementById(subject);
this.clickable = document.getElementById(clickable);
}和原型:
Inertia.prototype = {
subject : document.getElementById(''),
clickable : document.getElementById(''),
camera : { angleX : 85, angleY : 0, angleZ : 0, translateX : 0, translateY : -100, depth : 0, flag : 1 },
mouse : { x : 0, y : 0 },
friction : 1,
inertia : true,
mouseEvents : {
mouseDown : function( e ) {
var IS = this; // This will not work because I am two levels away from "this" being my object.
// cancel existing animation
clearTimeout((window).animation);
(IS).mouse.x = e.clientX;
(IS).mouse.y = e.clientY;
(IS).camera.flag = 0;
// begin logging history to animate from as a new history stack
(IS).tools.pushHistory('reset');
},..。继续...
我的问题是,在我的原型对象中,我不能访问根级别的元素,比如mouse.x或mouse.y。在创建这样的原型时,为我的“惯性”类的这个特定实例访问这些元素的最佳方法是什么?这是完全错误的想法吗?
我希望以这种方式理解原型的正确实现。我已经查找了关于原型的教程和文章,我还没有看到任何解决这个嵌套问题的例子。它们都在原型中使用了一个级别,所以调用this不成问题。
我正在尝试让var IS等于当前对象,这样在这个惯性相机的每个实例中,我将只改变那个特定的对象。然而,我在我的原型中有两层,所以this关键字将不起作用。如果我只有一个new Inertia()实例,我可以将它硬编码为变量名,但这显然是不可取的。
发布于 2012-12-04 15:19:40
属性通常放在原型的构造函数和方法中。我认为您可能遗漏了一些概念;在原型中创建(和复制)属性是没有意义的,因为属性对于实例是唯一的。如果这些变量是私有的,通常的惯例是在它前面加上一个下划线:
function Inertia( subject, clickable ) {
this.subject = document.getElementById( subject );
this.clickable = document.getElementById( clickable );
// Private vars unique to each instance
this._camera = { ... };
this._mouse = { ... };
this._friction = 1;
this._inertia = true;
}
Inertia.prototype = {
mouseDown: function( e ) {
var self = this;
// Now you can access and modify the private vars:
self._mouse.x = e.clientX;
...
}
};https://stackoverflow.com/questions/13697722
复制相似问题