Skip to content
登录后刷题更便捷

在构造函数中使用箭头函数有什么好处?

难度:

在构造函数里使用箭头函数的主要优点是它的 this 只与箭头函数创建时的 this 保持一致,并且不会修改。所以,当用构造函数去创建一个新的对象的时候,箭头函数的 this 总是指向新创建的对象。比如,假设我们有一个 Person 构造函数,它接受一个 firstName 参数,并且它有两个方法去调用 console.log 这个 firstName,一个是正常的函数,而另一个则是箭头函数:

js
const Person = function (firstName) {
  this.firstName = firstName;
  this.sayName1 = function () {
    console.log(this.firstName);
  };
  this.sayName2 = () => {
    console.log(this.firstName);
  };
};

const john = new Person("John");
const dave = new Person("Dave");

john.sayName1(); // John
john.sayName2(); // John

// 普通函数的 this 可以被修改,而箭头函数则不会
john.sayName1.call(dave); // Dave (因为 "this" 现在指向了 dave 对象)
john.sayName2.call(dave); // John

john.sayName1.apply(dave); // Dave (因为 "this" 现在指向了 dave 对象)
john.sayName2.apply(dave); // John

john.sayName1.bind(dave)(); // Dave (因为 "this" 现在指向了 dave 对象)
john.sayName2.bind(dave)(); // John

var sayNameFromWindow1 = john.sayName1;
sayNameFromWindow1(); // undefined (因为 "this" 现在指向了 Window 对象)

var sayNameFromWindow2 = john.sayName2;
sayNameFromWindow2(); // John

这里主要的区别是,正常函数的 this 是可以在执行过程中被改变的,而箭头函数的 this 则会一直保持一致。所以在使用箭头函数的时候,你就不需要担心它的上下文被改变了。

这在 React 的类组件里非常有用。如果你使用普通的函数来定义一个类方法,比如一个点击处理函数,然后你将这个点击处理函数通过 prop 的形式传递给子节点,你将必须在父组件的 constroctor 里使用 fn.bind(this) 的形式来确保该函数能正常工作。但是如果你使用箭头函数的话,你就不需要手动去绑定 this 了,因为箭头函数会自动绑定创建时的 this

(想看更好的演示以及示例代码,可以打开这篇文章: https://medium.com/@machnicki/handle-events-in-react-with-arrow-functions-ede88184bbb)

内容仅供参考,难免有不恰当的地方,如果有问题欢迎及时反馈
部分内容来自网络,如果不慎侵犯您的权益,请联系我们,以便及时删除侵权内容