关于 this 的指向, 很是疑惑啊 %>_<%

2014-06-11 16:28:41 +08:00
 mopig
https://gist.github.com/mopig/ba7fe3aef182e083806e

搞不懂 bind 前面的 this 和后边的 this 各指向的对象.

stackoverflow 上边看到的一段代码...
3097 次点击
所在节点    JavaScript
9 条回复
superbear
2014-06-11 16:34:25 +08:00
看不懂可以把this存到一个变量里例如,var _this = this。
lijsh
2014-06-11 16:38:30 +08:00
两个this都是同一个对象,就是以new调用MyObject时返回的实例对象。

添加事件处理函数时,当前作用域会丢失(即this会指向全局对象),因此这里要把this.onClick绑定回当前的this中。

还有一种会丢失作用域的情况是定时函数,所以如果想保存原来的上下文,同样需要为定时函数添加this绑定。
exoticknight
2014-06-11 16:55:21 +08:00
很多时候主要是代码运行的环境不一样导致this的指向变了,比如onclick执行的时候不是在你代码运行的时候而是你点击的时候。
mopig
2014-06-11 16:55:50 +08:00
@superbear 谢谢

@lijsh 解释很清楚, 太感谢了
superbear
2014-06-11 16:58:16 +08:00
@lijsh 哦,在看不懂的情况话,我就会将this对象赋给一个变量,供之后使用
lijsh
2014-06-11 18:21:55 +08:00
@superbear 一般this会丢失的情况就几种,闭包里,还有就是事件处理函数和定时函数,其他情况下不怎么需要保存这个this
pepsin
2014-06-11 18:29:29 +08:00
尽量避免用
mcfog
2014-06-11 19:06:27 +08:00
之前正好写了一篇关于this指向的文章 http://mcfog.github.io/2014/05/easy-ecma-1/

比起解释this,更多的是教你看ecma标准,希望对你有帮助
superbear
2014-06-11 22:05:04 +08:00
@lijsh 哦,比如经常在ajax传数据的时候用这种方法

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

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

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

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

© 2021 V2EX