关于 JavaScript 中 this 的疑问

2017-05-03 12:11:08 +08:00
 cstome
代码:

'''

引入 jQuery

<input type="button" value="TEST" id="btn1">

<script>
var obj = {
output: funciton() {
code block;
},
click: function() {
console.log(this);
//这里输出按钮的 DOM Object
this.output();
//this.output() not a function.
}
}

$("#btn1").click(obj.click);
</script>

'''

话说在 V2EX 中如何优雅的显示代码,用 Markdown 缩进和换行都没了。
2167 次点击
所在节点    JavaScript
8 条回复
xcssum
2017-05-03 12:16:30 +08:00
推荐 你不知道的 js 关于 this 的讲得很详细
IanPeverell
2017-05-03 12:17:07 +08:00
js 不是很懂,不过 markdown 这个锅你自己背,代码块不是用 ''' 而是用 ``` 不需要解释,而且 V2EX 有预览功能你自己可以先看一下效果再发出来
bumz
2017-05-03 12:24:17 +08:00
JS 中的 this 是运行时根据调用函数的(忘记名字了)确定的,例如 A.click() 中 click 是通过 A.click 调用的,所以 click 中 this 是 A

但如果 var click; (click = A.click)(),此时函数执行前 A.click 已被求值,A 就丢失了,于是 click 中 this 就指向 windows (严格模式为 undefined)

function evoke(fn) {fn()} evoke(A.click) 同理,此时 click 已经脱离的 A,this 指向 windows/undefined
bumz
2017-05-03 12:25:51 +08:00
evoke(A.click.bind(A)) 把 click 的 this 绑定到 A 即可解决这个问题。
SuperMild
2017-05-03 12:31:44 +08:00
看《你不知道的 js 》就可以了
bramblex
2017-05-03 12:48:04 +08:00
@bumz

context / 上下文
wobuhuicode
2017-05-03 13:31:38 +08:00
谁调用指向谁
yoa1q7y
2017-05-03 13:37:08 +08:00
这样理解一下
可以把函数想象成一个工具,比如一把剪刀
如果没人使用它 它就是一个独立存在的东西,此时的 this 就是 undefined (或 window )
张三用这把剪刀,那 this 就指向张三
很简单

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

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

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

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

© 2021 V2EX