为什么我们不能使用ES6箭头函数创建原型?

时间:2018-07-19 07:12:54

标签: javascript ecmascript-6

首先,我创建一个ES5函数,然后创建它的原型:

var Person = function() {};

Person.prototype.city = function() {return 'New York'}

我在这里没有错误。但是,当我使用ES6粗箭头功能创建相同内容时,我得到Cannot set property 'city' of undefined

let Person = () => {};

Person.prototype.city = () => {return 'New York'}

这是为什么?

1 个答案:

答案 0 :(得分:9)

由于定义,箭头函数没有原型。它们被设计为轻巧的,没有老式功能所带来的负担。

另一个可能的原因是箭头函数捕获了周围的this而不是动态确定它。因此,它们不能很好地用作构造函数,因为其中的this会从周围的范围而不是正在创建的对象中引用this。 (实际上,您甚至不能将它们用作构造函数。如果您尝试这样做,JavaScript将会引发错误。)

来自MDN

  

使用原型属性

     

箭头功能没有原型属性。

var Foo = () => {};
console.log(Foo.prototype); // undefined