function Z(params) {
for (var j in params) {
this[j] = params[j];
}
}
Z.prototype = {
show: function () {
var _this = this;
$(window).bind('resize', this.adjust); // Return undefined? Why?
//$(window).bind('resize',function(){
// _this.adjust(); // This works.
//});
},
adjust: function () {
alert(this.id);
}
}
var a = new Z({
id: 5
});
a.show();
您好,为什么this.adjust返回undefined?但它在使用匿名函数时起作用。
答案 0 :(得分:1)
这是因为this
中的alert(this.id);
现在指的是window
对象,而不是指a
个实例。
答案 1 :(得分:1)
这是一个“这个”范围问题。尝试替换声明:
$(window).bind('resize', this.adjust);
由此:
$(window).bind('resize', _this.adjust);
答案 2 :(得分:1)
在Javascript闭包中,this
关键字是后期绑定。这意味着在实际调用函数之前不会对其进行评估。
因此,当“resize”事件被触发时,您的上下文已经消失。
将值赋给变量然后在函数内使用该变量会创建闭包。只要在某处引用该函数,它将保留_this
的值。
_this
使用早期绑定,而this
使用后期绑定。在调用resize事件处理程序时,this
的值将是窗口对象,显然没有方法adjust