您好,匿名用户
随意问技术百科期待您的加入

回调函数中this指代问题

0 投票
var obj = {
	//我想让this指代上面这个obj
	a:function(){
		setTimeout(function(){
			console.log(this);
		},100);
	},
	//好吧,曲折解决了
	b:function(){
		var me = this;
		setTimeout(function(){
			console.log(me);
		},100);
	},
	//如果我要把callback拿出来,又有问题了。。。
	c:function(){
		//这下不管我怎么在c和callback里倒来倒去的找变量,都不能在callback里找到最上面的那个obj了。。
		setTimeout(this.callback,100);
	},
	callback:function(){
		console.log(this);//我需要在这里找到obj..
	}
};
obj.a();
//obj.b();
//obj.c();
用户头像 提问 2012年 12月1日 @ Lulu 上等兵 (293 威望)
分享到:

1个回答

0 投票

atrl的方法解决了将callback函数剥离,并保持this引用的问题。
在比较先进的浏览器中可以使用这种方法:

c:function(){
                setTimeout(this.callback.bind(this),100);
        }

ie等浏览器可以自行扩展Function对象的prototype实现。但道理其实都是创建了新的函数。

此处的需求这样做就可以了。有时候会碰到事件处理函数需要解耦的情况,由于还要考虑解除绑定,会更复杂一些,需要自己写对象进行管理。

用户头像 回复 2012年 12月1日 @ Zilean 上等兵 (230 威望)
提一个问题:

相关问题

0 投票
1 回复 62 阅读
用户头像 提问 2012年 12月1日 @ Aphrodite 上等兵 (185 威望)
0 投票
1 回复 35 阅读
用户头像 提问 2012年 12月1日 @ Draven 上等兵 (325 威望)
0 投票
1 回复 28 阅读
0 投票
0 回复 1 阅读
用户头像 提问 2014年 6月7日 @ Nero 上等兵 (377 威望)
0 投票
1 回复 43 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...