为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript回调范围

JavaScript回调范围

青春有我 2019-11-25 12:41:43
我在使用普通旧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对象的引用?
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

解释是,self.onclick这并不意味着您认为它在JavaScript中意味着什么。它实际上意味着onclick对象原型中的功能self(不以任何方式引用self其自身)。


JavaScript仅具有函数,没有像C#这样的委托,因此无法传递方法AND应该将其应用于回调的对象。


在回调中调用方法的唯一方法是在回调函数中自己调用它。由于JavaScript函数是闭包,因此它们能够访问在其创建范围内声明的变量。


var obj = ...;

function callback(){ return obj.method() };

something.bind(callback);


查看完整回答
反对 回复 2019-11-25
?
跃然一笑

TA贡献1826条经验 获得超6个赞

对于寻求解决此问题的jQuery用户,您应该使用jQuery.proxy


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 409 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信