setInterval创建新对象

时间:2015-07-18 08:11:51

标签: javascript class prototype

我正在用JavaScript编写一个小应用程序,我有一个类和一个原型方法。

function Canvas(_canvasId, _page) {
    this.c = document.getElementById(_canvasId);
    this.ctx = this.c.getContext("2d");
    this.page = _page;
};

Canvas.prototype.draw = function () {
    console.log(this);

    switch (this.page) {
        case "_CitySystem":
            //this.renderCitySystem();
            break;
    }
};
然后我创建一个新实例并调用draw方法:

$(document).ready(function () {
    var g = new Canvas("cCity", "_CitySystem");
    setInterval(g.draw, 1000);
});

我遇到的问题是当我做的时候

console.log(this);

我希望它输出Canvas对象属性,而不是我得到windows对象属性:

enter image description here

但是我做了

d.draw();

没有setInterval,控制台输出是我所期望的,所以在setInterval的回调中,最终结果是一个不同的对象,我怎么能告诉setInterval我想要使用我拥有的对象属性传入?

2 个答案:

答案 0 :(得分:0)

g.draw替换为function () { g.draw(); }

答案 1 :(得分:-2)

当您致电setIntervalsetTimeout时,您确实是在window打电话。

你需要传递上下文,这可以通过jQuery.proxy来完成:

setInterval($.proxy(g.draw, g), 1000);

请参阅文档:https://api.jquery.com/jQuery.proxy/