0
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?但是它在使用匿名函数时起作用。

4

3 回答 3

1

这是一个“this”范围问题。尝试替换语句:

$(window).bind('resize', this.adjust);

这样:

$(window).bind('resize', _this.adjust);
于 2013-07-12T18:10:40.213 回答
1

在 Javascript 闭包中,this关键字是后期绑定。这意味着在实际调用函数之前不会对其进行评估。

因此,当触发“resize”事件时,您的上下文已经消失了。

将值分配给变量然后在函数中使用该变量会创建一个闭包。只要该函数在某处被引用,它将保留_this.

_this在您的示例中使用早期绑定,而this使用后期绑定。在调用 resize 事件处理程序时,值this将是显然没有方法的窗口对象adjust

另请参阅:http: //javascript.info/tutorial/binding

于 2013-07-12T18:11:12.517 回答
1

这是因为thisinalert(this.id);现在引用window对象而不是您的a实例。

于 2013-07-12T18:05:53.380 回答