当我将函数draw(){ //}
更改为draw = () => { // }
时
我得到一个错误,如" Uncaught SyntaxError:Unexpected token ="。
可能是什么原因?
答案 0 :(得分:6)
首先,你可能不应该这样做。为什么?好吧,因为箭头函数在语义上与常规函数不同。
如果您将函数注册为this.draw = () => {//}
,那么class
*的每个实例都将具有该函数的重复定义,这会浪费空间并滥用某些核心语言功能,例如原型继承。
draw()
在prototype
上注册该函数,以便可以在所有实例之间共享draw函数的定义,甚至可以同时为所有实例动态更改。
答案 1 :(得分:1)
在你的构造函数中,你可以拥有this.draw = () => {//}
,但这样做并没有多大意义。 draw(){//}
对任何你想要的东西都应该没问题。
下面,在我的示例中,我已经显示了两个用例,因为您可以看到使用箭头函数没有保存任何内容。
class StandardFunction {
draw() {
console.log('StandardFunction: you called draw')
}
}
class ArrowFunction {
constructor() {
this.draw = () => {
console.log('ArrowFunction: you called draw')
}
}
}
const test1 = new StandardFunction();
const test2 = new ArrowFunction();
test1.draw();
test2.draw();
我希望你能找到这个有用的
答案 2 :(得分:0)
你将需要使用babel的Class properties transform,这将转移:
class Picture {
draw = () => {
console.log('drawing')
}
}
成:
class Picture {
constructor() {
this.draw = () => {
console.log('drawing');
};
}
}
您可以在此repl中尝试(请务必启用class properties transform plugin
)