在我的某个类的某个函数中,我需要使用setInterval
来分解代码的执行。但是,在setInterval
函数中,“this”不再引用类“myObject”。如何从setInterval
函数中访问变量“name”?
function myObject() {
this.name = "the name";
}
myObject.prototype.getName = function() {
return this.name;
}
myObject.prototype.test = function() {
// this works
alert(this.name);
var intervalId = setInterval(function() {
// this does not work
alert(this.name);
clearInterval(intervalId);
},0);
}
答案 0 :(得分:12)
myObject.prototype.test = function() {
// this works
alert(this.name);
var oThis = this;
var intervalId = setInterval(function() {
// this does not work
alert(oThis.name);
clearInterval(intervalId);
},0);
}
这应该有效。匿名函数的“this”与myObject的“this”不同“this”。
答案 1 :(得分:1)
这是原型绑定函数
Function.prototype.bind = function( obj ) {
var _this = this;
return function() {
return _this.apply( obj, arguments );
}
}
答案 2 :(得分:0)
这是原型中的绑定:
function myObject() {
this.name = "the name";
}
myObject.prototype.getName = function() {
return this.name;
}
myObject.prototype.test = function() {
// this works
alert(this.name);
var intervalId = setInterval(function() {
// this does not work
alert(this.name);
clearInterval(intervalId);
}.bind(this),0);
}
答案 3 :(得分:0)
请注意,s13james的答案不完整,因为bind()
不是标准功能,必须在别处提供 - 一种方法是使用prototype.js Javascript框架,而另一种方法是使用meouw的代码自己完成示例
如果你不使用bind()
(这是非常好的,我必须说),那么djangel的反应是你本可以做的,也是我经常做的。