this.method返回undefined

时间:2013-07-12 17:55:16

标签: javascript undefined

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

3 个答案:

答案 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

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