JavaScript 的 this 让人很困惑,到底什么时候该用 this 呢?

2015 年 3 月 8 日
 tedd
楼主是通过Python自学入门的编程,在Python中,按我有限的了解,this是在OO的场景下使用,指的是对象本身,来到了JS,this满天飞,而且不是指的‘对象’本身,我也看过一些资料,了解this需要先了解runtime context,谁call的这个方法,这个this就是指的那个caller,这样理解对吗?

如果上面的理解正确,那看别人代码大概能看懂this了,自己写的时候就又头大了,什么时候需要用this呢?感觉js中面向对象和函数式编程混着,太难了...
4480 次点击
所在节点    JavaScript
19 条回复
RIcter
2015 年 3 月 8 日
this 不是自己的意思_(:з」∠)_

好像 stackoverflow 上有不錯的回答
Bluecoda
2015 年 3 月 8 日
js的this还不算难理解吧。ruby元编程的时候,self才真正满天飞。
arachide
2015 年 3 月 8 日
@tedd

了解this需要先了解runtime context,谁call的这个方法,这个this就是指的那个caller,这样理解对吗?



结合that看一下就好了

:-)
EPr2hh6LADQWqRVH
2015 年 3 月 8 日
js的函数和python里面这点还挺像的,就是函数可以套在任何一个对象上执行。

python的话就是第一个参数,约定俗称叫它self,但self并不是关键字,换成其他的一样运行。

js的this和python里面的self一个效果,就是当前函数操作的对象,也就是套的对象,现在这个函数套在这个对象上执行。只不过this在js里是关键字,是隐含的。
bumz
2015 年 3 月 8 日
this 指向通過「a.b()」調用的 a

http://segmentfault.com/q/1010000000636749
lcj2class
2015 年 3 月 8 日
rentaro
2015 年 3 月 8 日
推荐阅读《JavaScript 高级程序设计》 比你在这问有效
billlee
2015 年 3 月 8 日
this 有三种用法

```javascript

function fn() {
alert(this.something);
}

something = "global";
obj = {
something: "object",
method: fn
};

fn(); //global
obj.method(); //object
var obj2 = new fn(); //undefined
```
FrankFang128
2015 年 3 月 8 日
每次用 this 之前,console.log(this) 就好了。
因为 this 是在运行时确定的。
anewg
2015 年 3 月 8 日
tedd
2015 年 3 月 8 日
感谢所有回复的童鞋,Javascript高级程序设计已在京东下单,现在开始挨着看看楼上各位提供的链接
Mutoo
2015 年 3 月 8 日
@anewg 这篇居然没讲到 func.bind()
shibo501c
2015 年 3 月 8 日
tedd
2015 年 3 月 9 日
yinxingren
2015 年 3 月 9 日
hkongm
2015 年 3 月 9 日
首先 use strict
其次 var _ = this
再次 bind,apply,call
tedd
2015 年 3 月 9 日
@hkongm 简单明了 :) 谢谢
lalalanet
2015 年 3 月 9 日
hahasong
2015 年 3 月 10 日
我和楼主相反,先学的js,后学的python,突然改用self还有点不习惯。js的this刚开始也是很容易晕菜,其实js的内置类型都是对象,谁调的方法,方法里的this就指哪个对象。call和apply可以将方法用指定对象调用。另外如果用框架或者别人封装的方法,那就要看文档怎么说了,或者你打印一下就知道了

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

https://study.congcong.us/t/175397

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

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

© 2021 V2EX