模块/原型和多个实例

时间:2013-05-04 23:01:06

标签: javascript prototypal-inheritance module-pattern

我正试图掌握“OOP”JavaScript技术,今天我开始编写一个小型测试应用程序。基本上,它是一个游戏循环,并且每个更新坐标都要增加,以便HTML元素移动。

问题是我希望能够运行多个应用程序实例,因此我尝试将实例数据存储在this中,但是我的构造函数和{{1私有exec()方法中没有方法。什么似乎是军官,问题?

update()

编辑:使用可行的解决方案更新了代码!

2 个答案:

答案 0 :(得分:3)

在JavaScript中,this(几乎)完全取决于你调用函数的 ,而不是它定义的位置和方式。

您拨打update的方式:

update();

... this将成为全局对象(浏览器上为window),如果您使用undefined,则为"use strict"

要在this内设置update,请使用callapply

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);
};