为什么类是JavaScript中的保留字?

wuk*_*ong 26 javascript

我打算用JavaScript实现类继承接口.class是构造函数名称的完美单词.

class = function (classname) {}; // create a class with classname
classA = new class("classA"); // create a class named classA
Run Code Online (Sandbox Code Playgroud)

不幸的是,这class是JavaScript中的保留字.

为什么JavaScript保留这个词class(因为它从不使用它)?

zzz*_*Bov 27

它保留给面向未来的ECMAScript

以下词语用作建议扩展中的关键字,因此保留用于允许将来采用这些扩展的可能性.

不要担心,如果您在JavaScripts中使用最佳实践,则将所有可访问的函数/变量/构造函数放在命名空间中,这将允许您使用您喜欢的任何名称:

foo = {};
foo['class'] = function(){...code...};
var myClass = new foo['class']();
Run Code Online (Sandbox Code Playgroud)

  • 请注意,"Class"不是保留的(大写"C"),它可以毫无问题地用作变量或函数声明的标识符(实际上,建议将构造函数的名称大写).现在,`foo.RESERVEDWORD`将不适用于ES3实现,因为点属性访问器的语法中不允许使用关键字(保留字和将来保留字),也不允许使用对象文字语法(BTW,这就是JSON格式的原因) ,必须引用密钥......).这在ES5上发生了变化,现在可以访问任何有效的标识符名称,即使它是保留的,例如`({if:1}).if == 1;` (2认同)

Thi*_*ilo 8

语言在不断发展.谨慎保留一些可能在以后使用的关键字.根据ECMA标准,class是未来保留字.

如果您没有保留它们,引入新关键字可能会与现有代码冲突(现在可能已将该词用于其他内容).发生在Java和assert.


小智 6

现在它用于ECMAScript®2015语言规范:

class Foo {
    constructor(bar) {
        this.bar = bar;
    }
}
new Foo(10).bar; // 10
Run Code Online (Sandbox Code Playgroud)