我注意到,似乎没有明确解释this关键字是什么以及如何在Stack Overflow站点上的JavaScript中正确(和错误地)使用它.
我亲眼目睹了一些非常奇怪的行为,并且无法理解为什么会发生这种行为.
this工作如何以及何时使用?
我想知道点抽象方法(例如dog.bark)是在运行时还是在编译时绑定.我的问题涉及以下代码,它会引发错误:
(true ? ''.toLowerCase : ''.toUpperCase)()Run Code Online (Sandbox Code Playgroud)
但以下不是:
true ? ''.toLowerCase() : ''.toUpperCase()Run Code Online (Sandbox Code Playgroud)
为什么我的字符串文字''在第一个例子中没有得到解决?
由于函数在未作为对象属性[1]访问时被赋予"全局上下文",因此以下内容具有相同的特征:
const foo = ({bar}) => {
bar(); // this === window
}
Run Code Online (Sandbox Code Playgroud)
因为它只是语法糖:
const foo = (x) => {
var bar = x.bar;
bar();
}
Run Code Online (Sandbox Code Playgroud)
因为我现在必须重新绑定或放弃糖,这对我来说似乎有点违反直觉.
有没有办法改变这种行为,以便不改变上下文(除了通过.apply/call/bind显式设置它)?是否有任何关于标准的计划/建议?