通常我会在 setInterval 中引用“this”时分配一个替代的“self”引用。是否有可能在原型(prototype)方法的上下文中完成类似的事情?以下代码错误。
function Foo() {}
Foo.prototype = {
bar: function () {
this.baz();
},
baz: function () {
this.draw();
requestAnimFrame(this.baz);
}
};
与 Python 等语言不同,Javascript 方法会在您提取它并将其传递到其他地方后忘记它是一个方法。你也可以
将方法调用包装在一个匿名函数中
这样,访问 baz
属性和调用它是同时发生的,这是在方法调用中正确设置 this
所必需的。
您需要将来自外部函数的 this
保存在辅助变量中,因为内部函数将引用不同的 this
对象。
var that = this;
setInterval(function(){
return that.baz();
}, 1000);
将方法调用包装在一个粗箭头函数中
在实现 arrow functions 的 Javascript 实现中功能,可以使用粗箭头语法以更简洁的方式编写上述解决方案:
setInterval( () => this.baz(), 1000 );
粗箭头匿名函数保留周围函数中的 this
,因此无需使用 var that = this
技巧。要查看您是否可以使用此功能,请查阅兼容性表,如 this one .
使用绑定(bind)函数
最后一个替代方法是使用函数,例如 Function.prototype.bind 或您最喜欢的 Javascript 库中的等效函数。
setInterval( this.baz.bind(this), 1000 );
//dojo toolkit example:
setInterval( dojo.hitch(this, 'baz'), 100);