JavaScript回调范围

我在使用普通旧JavaScript(无框架)在回调函数中引用我的对象时遇到了一些麻烦。


function foo(id) {

    this.dom = document.getElementById(id);

    this.bar = 5;

    var self = this;

    this.dom.addEventListener("click", self.onclick, false);

}


foo.prototype = {

    onclick : function() {

        this.bar = 7;

    }

};

现在,当我创建一个新对象时(在DOM加载后,使用span#test)


var x = new foo('test');

在“这个”的onclick函数指向跨度#测试里面,而不是Foo对象。


如何在onclick函数中获取对foo对象的引用?


青春有我
浏览 410回答 3
3回答

炎炎设计

解释是,self.onclick这并不意味着您认为它在JavaScript中意味着什么。它实际上意味着onclick对象原型中的功能self(不以任何方式引用self其自身)。JavaScript仅具有函数,没有像C#这样的委托,因此无法传递方法AND应该将其应用于回调的对象。在回调中调用方法的唯一方法是在回调函数中自己调用它。由于JavaScript函数是闭包,因此它们能够访问在其创建范围内声明的变量。var obj = ...;function callback(){ return obj.method() };something.bind(callback);

跃然一笑

对于寻求解决此问题的jQuery用户,您应该使用jQuery.proxy
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript