我正在用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对象属性:
但是我做了
d.draw();
没有setInterval,控制台输出是我所期望的,所以在setInterval的回调中,最终结果是一个不同的对象,我怎么能告诉setInterval我想要使用我拥有的对象属性传入?
答案 0 :(得分:0)
将g.draw
替换为function () { g.draw(); }
。
答案 1 :(得分:-2)
当您致电setInterval或setTimeout时,您确实是在window
打电话。
你需要传递上下文,这可以通过jQuery.proxy来完成:
setInterval($.proxy(g.draw, g), 1000);