通过查看参考ECMA6的文档部分的Node官方网站,我了解到ecma6功能分为三组,即:
在发货类别(不需要运行时标志(如和声))中,类具有特色,但附加说明(仅限严格模式)。
我无法找到一个在线资源,其中明确说明NodeJS v 0.12(我正在运行的那个)是否支持ECMA6类。
所以,按照上面提到的页面中的描述,我尝试在我的js文件中包含“use strict”,既可以在文件的开头,也可以作为类的范围内的替代方法,在任何方法或属性之前宣言。但是,当我运行node whatever.js时,我得到了SyntaxError:意外的保留字,引用了“class”关键字。
其他一些网络资源声称要解决保留字错误,只需使用--harmony标志就会有所帮助。我也试过了,但没有任何成功。当我运行节点--v8-options | grep harmony我得到以下列表:
--harmony_scoping (enable harmony block scoping)
--harmony_modules (enable harmony modules (implies block scoping))
--harmony_proxies (enable harmony proxies)
--harmony_generators (enable harmony generators)
--harmony_numeric_literals (enable harmony numeric literals (0o77, 0b11))
--harmony_strings (enable harmony string)
--harmony_arrays (enable harmony arrays)
--harmony_arrow_functions (enable harmony arrow functions)
--harmony (enable all harmony features (except proxies))
就我而言,课程不包括在此列表中。
我还尝试安装babel-node并从CLI运行相同的代码,但在收到相同的SyntaxError后仍然没有成功。
我的问题是,您对在NodeJS中使用 ECMA6类进行测试的最实用方法有什么建议,最好不需要安装一些编译器,例如traceur。理想情况下,我想澄清为什么Node的文档页面说明类功能仅在严格模式下启用,但在使用strict时仍然会收到错误。
以防万一:
//tried here "use strict";
class Cat {
//or here "use strict";
constructor(name) {
this.name = name;
}
speak(){
console.log(this.name + 'makes a noise.');
}
}
class Lion extends Cat {
//and here "use strict";
speak(){
super.speak();
console.log(this.name + 'roars');
}
}
const animal1 = new Cat('cat');
const animal2 = new Lion('lion');
console.log(animal1);
console.log(animal2);
编辑(对于最终会偶然发现此问题的任何人): 我已经成功解决了这个问题,升级到最新版本的NodeJS(现在正在编写5.0.0)。 This页面有关如何正确执行升级的简洁说明。现在,当在文件的开头包含“use strict”时,程序会运行无错误,并且我会收到预期的输出。