现在我把闭包跟 this 分开来看了,又遇到了些问题,望各位解答

2017-05-22 12:47:47 +08:00
 cheroky

谢谢上一个帖子各位大牛细心解答,是应该把 this 分开看。然后我看 you dont know js,先把 this 搞懂,里面说的 this 的会突然指向 window 的变量,结合楼内大神的答案,其实可以用 window 解释,然后我遇到了回调函数 this 的下面问题:

var name = "global";
var obj = {
	name: "Yes",
	getName: function() {
		console.log(this.name);
	}
}

function doo(f) {
	f(); 
}

doo(obj.getName) //"global"

至少这个例子我可以理解为 obj.getName 的调用点再 doo 函数里,所以 this 应该指向这个,而调用这个函数可以解释为 window.doo(obj.getName),doo 的 this 指向 window,所以最终的 this 指向 window。那如果我用一个有 this 的对象来调用呢。代码如下:

var name = "global";
var obj = {
	name: "Yes",
	getName: function() {
		console.log(this.name);
	}
}

var obj2 = {
	name: "Yes2",
	getName: function(f) {
		f();
	}
}

obj2.getName(obj.getName) //"global"

发现这个 this 还是指向 window,有点想不通。。。

3707 次点击
所在节点    JavaScript
26 条回复
bramblex
2017-05-22 16:00:13 +08:00
这个 this 叫做 “上下文指针”,指向的是这个函数在被调用的那一刻,直接调用这个函数的对象。

而函数在创建的时候,这个 this 是毫无意义的。
cheroky
2017-05-22 16:55:35 +08:00
@Biwood
@bramblex
@whimsySun
大概有点理解了,那就是 function a(){b();} 虽然放在 a()里面,这个 b()并不不不不不不不不不不不不不是 a()调用的!!!!??,所以也不存在 this 指向 a,然后最后 b()所以指向的是 window ?
IdJoel
2017-05-22 17:17:22 +08:00
留一下 不忙了看 感谢 LZ 和大牛
crs0910
2017-05-22 22:54:14 +08:00
js 的 this 不是 self 而是 context
saga
2017-05-23 17:40:49 +08:00
wedaren
2017-05-26 16:10:56 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/362930

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX