为什么我必须在类中使用foo()而不是函数foo()?

时间:2018-02-28 18:05:29

标签: javascript

为什么我必须在类中使用foo()而不是函数foo()?

class car {
  move() {
    console.log("move")
  }
}
let a = new car()
a.move()

function move() {
  console.log("move")
}
move()

JS FIDDLE

1 个答案:

答案 0 :(得分:8)

因为这就是class语法的设计方式。那些是方法声明,而不是函数声明(方法是函数,但是可以访问super,并且它们是作为其[[HomeObject]]的一部分创建的对象的牢不可破的链接) 。虽然可以设计语法来要求function关键字,但它本来是冗长的,不必要的,并且可以说具有误导性;所以TC39(推动JavaScript前进的委员会)决定不再包含它。

附注:你也可以在对象初始化器中使用方法语法,但与class主体不同,它与任何其他属性声明一样,你必须用逗号将其与其他属性分开:

const o = {
    foo() {
        // ...
    },                // <=== Note the comma
    bar() {
        // ...
    }
};

而这些逗号在类体中会出现语法错误,如下所示:

class Example {
    foo() {
        // ...
    }
    bar() {
        // ...
    }
}