在课堂内使用es6箭头功能

时间:2018-05-14 08:23:56

标签: javascript ecmascript-6

当我将函数draw(){ //}更改为draw = () => { // }时 我得到一个错误,如" Uncaught SyntaxError:Unexpected token ="。 可能是什么原因?

3 个答案:

答案 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