【发布时间】:2018-07-21 17:02:23
【问题描述】:
(Stack Overflow 通知我,这个问题可能会被否决或标记为重复,但我希望您不要这样做,因为我一直在仔细研究 Stack Overflow 的答案以尝试回答它,并且发现帖子中的内容相互矛盾,这是我正在尝试解决的问题)。
我试图了解箭头函数的绑定(以及这与它们作为对象和类方法的使用有何关系)。我的理解是,箭头函数在创建时就绑定了,从定义它的上下文中获取this。有些帖子说是这样。有些帖子则相反,认为箭头函数根本不受约束,例如这篇帖子 Arrow Functions and This ,其中投票率最高的答案是:
简答:this 指向最近的边界 this - 在代码中 只要在封闭范围内找到它。
更长的答案:箭头函数
绑定它们的 this 时 created没有绑定 this、arguments 或其他特殊名称 根本 - 当对象被创建时,它所在的名称 封闭范围,而不是 person 对象。
我创建了一个小的 Codepen 示例来测试哪个是正确的,并且我相信箭头函数在创建时是永久绑定的:如果将箭头函数分配给对象的属性,然后在另一个对象的上下文,它仍然保持它创建时的this。
它是什么?箭头函数是在创建时永久绑定到创建它们的上下文的this,还是根本不绑定?
如果它们在创建时确实被绑定,那是你可以在 ES6 类中使用箭头函数作为方法的原因吗?也就是说在这种情况下
class MyClass {
constructor() {
this.myVariable = 0;
console.log("in constructor this is",this)
this.myMethod = () => {
console.log("in myMethod this is",this)
this.myVariable++;
};
}
箭头函数 myMethod 只是绑定到 this,构造函数已将其定义为正在创建的实例的上下文?
感谢您的帮助!
【问题讨论】:
-
箭头函数没有
this。例如,参见MDN's article on arrow functions。请注意,该页面还提到它们不适合成员函数...
标签: javascript this arrow-functions