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

Tob*_*s K 2 javascript

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

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

function move() {
  console.log("move")
}
move()
Run Code Online (Sandbox Code Playgroud)

JS FIDDLE

T.J*_*der 8

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


旁注:您也可以在对象初始化程序中使用方法语法,但与class正文不同,它与任何其他属性声明一样,您必须使用逗号将其与其他属性分开:

const o = {
    foo() {
        // ...
    },                // <=== Note the comma
    bar() {
        // ...
    }
};
Run Code Online (Sandbox Code Playgroud)

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

class Example {
    foo() {
        // ...
    }
    bar() {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)