我正试图掌握“OOP”JavaScript技术,今天我开始编写一个小型测试应用程序。基本上,它是一个游戏循环,并且每个更新坐标都要增加,以便HTML元素移动。
问题是我希望能够运行多个应用程序实例,因此我尝试将实例数据存储在this
中,但是我的构造函数和{{1私有exec()
方法中没有方法。什么似乎是军官,问题?
update()
编辑:使用可行的解决方案更新了代码!
答案 0 :(得分:3)
在JavaScript中,this
(几乎)完全取决于你调用函数的 ,而不是它定义的位置和方式。
您拨打update
的方式:
update();
... this
将成为全局对象(浏览器上为window
),如果您使用undefined
,则为"use strict"
。
要在this
内设置update
,请使用call
或apply
:
update.call(this);
// or
update.apply(this);
更多(在我的博客上):
答案 1 :(得分:2)
您尚未将update
添加到原型中。该方法中this
的值很可能是window
对象。
从此处更改您的电话:
update();
对此:
update.call(this);
或者将update
添加到.prototype
:
Jsloth.prototype.update = update;
并使用:
this.update();
但是,如果您要从update()
致电setInterval()
,则需要确保this
值正确。
为此,您可以传递一个匿名函数,并在变量中保留对外this
值的引用。
var exec = function () {
this.x = 0;
this.y = 0;
var that = this;
setInterval(function() {
that.update();
//update.call(that); // if you didn't add update() to the .prototype
}, 1000/10);
};