【发布时间】:2012-12-04 07:05:28
【问题描述】:
让我们开始吧。 我在 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() 的实例,我可以将它硬编码为变量名,但这显然是不可取的。
【问题讨论】:
标签: javascript class object constructor prototype