首先,我创建一个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'}
这是为什么?
答案 0 :(得分:9)
由于定义,箭头函数没有原型。它们被设计为轻巧的,没有老式功能所带来的负担。
另一个可能的原因是箭头函数捕获了周围的this
而不是动态确定它。因此,它们不能很好地用作构造函数,因为其中的this
会从周围的范围而不是正在创建的对象中引用this
。 (实际上,您甚至不能将它们用作构造函数。如果您尝试这样做,JavaScript将会引发错误。)
来自MDN:
使用原型属性
箭头功能没有原型属性。
var Foo = () => {}; console.log(Foo.prototype); // undefined