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

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

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

好像 stackoverflow 上有不錯的回答
Bluecoda
2015-03-08 22:11:44 +08:00
js的this还不算难理解吧。ruby元编程的时候,self才真正满天飞。
arachide
2015-03-08 22:25:36 +08:00
@tedd

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



结合that看一下就好了

:-)
EPr2hh6LADQWqRVH
2015-03-08 22:27:14 +08:00
js的函数和python里面这点还挺像的,就是函数可以套在任何一个对象上执行。

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

js的this和python里面的self一个效果,就是当前函数操作的对象,也就是套的对象,现在这个函数套在这个对象上执行。只不过this在js里是关键字,是隐含的。
bumz
2015-03-08 22:27:50 +08:00
this 指向通過「a.b()」調用的 a

http://segmentfault.com/q/1010000000636749
lcj2class
2015-03-08 22:30:24 +08:00
rentaro
2015-03-08 22:33:50 +08:00
推荐阅读《JavaScript 高级程序设计》 比你在这问有效
billlee
2015-03-08 22:36:11 +08:00
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-03-08 22:42:42 +08:00
每次用 this 之前,console.log(this) 就好了。
因为 this 是在运行时确定的。
anewg
2015-03-08 22:44:52 +08:00
tedd
2015-03-08 22:57:47 +08:00
感谢所有回复的童鞋,Javascript高级程序设计已在京东下单,现在开始挨着看看楼上各位提供的链接
Mutoo
2015-03-08 23:11:41 +08:00
@anewg 这篇居然没讲到 func.bind()
shibo501c
2015-03-08 23:19:43 +08:00
tedd
2015-03-09 00:18:59 +08:00
yinxingren
2015-03-09 00:31:26 +08:00
hkongm
2015-03-09 10:04:25 +08:00
首先 use strict
其次 var _ = this
再次 bind,apply,call
tedd
2015-03-09 10:33:16 +08:00
@hkongm 简单明了 :) 谢谢
lalalanet
2015-03-09 11:06:10 +08:00
hahasong
2015-03-10 01:48:27 +08:00
我和楼主相反,先学的js,后学的python,突然改用self还有点不习惯。js的this刚开始也是很容易晕菜,其实js的内置类型都是对象,谁调的方法,方法里的this就指哪个对象。call和apply可以将方法用指定对象调用。另外如果用框架或者别人封装的方法,那就要看文档怎么说了,或者你打印一下就知道了

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

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

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

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

© 2021 V2EX