回调函数中this指代问题

发布于 2022-09-06 01:08:52 字数 457 浏览 20 评论 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();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

御弟哥哥 2022-09-13 01:08:52

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

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

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

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

浮光之海 2022-09-13 01:08:52

建议搜索“闭包”的概念

贪恋 2022-09-13 01:08:52
obj = {
        
        c:function(){
              var that = this;
                setTimeout(function(){that.callback()},100);
        },
酸甜透明夹心 2022-09-13 01:08:52
c:function(){
    var _this = this;
    setTimeout(function(){_this.callback.call(_this)},5000);
}
阪姬 2022-09-13 01:08:52

好像在jquery新版中 提供了$.proxy(FUN,this) 你可以试试哈。这样不会导致上下文被切换导致FUN无效

梦情居士 2022-09-13 01:08:52

在Javascript中,This关键字永远都指向函数(方法)的所有者

音栖息无 2022-09-13 01:08:52

setTimeout的第一个参数相当于一个匿名方法体或者是方法指针,它不关心方法的所有者是谁,他只关心方法能做什么,这种情况下 想获得obj除了闭包就是传参数给匿名方法了

七度光 2022-09-13 01:08:52

在 callback 里面直接就可以拿到 obj:

callback:function(){
  console.log(obj);//我需要在这里找到obj..
}
任性一次 2022-09-13 01:08:52

楼上说得没错,obj可以被callback取到。

GRAY°灰色天空 2022-09-13 01:08:52

可以这么来,在obj中定义一个变量 var_obj:this,以后每次都使用这个变量就可以了 @M君_ 说的太好了,怒赞

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文