具有默认参数值的es6类构造函数上的nodejs错误

时间:2016-04-24 23:39:52

标签: javascript node.js function class ecmascript-6

我运行简单的es6类代码如下:

'use strict';
class Polygon {
  constructor(height=44, width=55) { //class constructor
    this.name = 'Polygon';
    this.height = height;
    this.width = width;
  }

  sayName() { //class method
    console.log('Hi, I am a', this.name + '.');
   }
}

class Square extends Polygon {
  constructor(length) {
    super(length, length); //call the parent method with super
    this.name = 'Square';
  }

  get area() { //calculated attribute getter
    return this.height * this.width;
  }
}

let s = new Square();

 s.sayName();
 console.log(s.area);

它在Chrome控制台上正常运行。 但它在nodejs(4.x,5.x)上运行错误如下:

constructor(height=44, width=55) { //class constructor
                      ^

  SyntaxError: Unexpected token =
  at exports.runInThisContext (vm.js:53:16)
  at Module._compile (module.js:387:25)
  at Object.Module._extensions..js (module.js:422:10)
  at Module.load (module.js:357:32)
  at Function.Module._load (module.js:314:12)
  at Function.Module.runMain (module.js:447:10)
  at startup (node.js:148:18)
  at node.js:405:3

我认为es6支持函数的默认参数,而chrome和node.js是运行V8引擎,为什么要给出差异答案,...

2 个答案:

答案 0 :(得分:3)

这是5.x中的in progress功能,可以通过标记--harmony_default_parameters激活:

$ node -v 
v5.0.0
$ node --harmony_default_parameters  script.js

要查看节点版本中的进度标志列表:

node --v8-options | grep "in progress"

答案 1 :(得分:0)

您可以使用Babel来代码转换代码:

  1. npm init
  2. npm install --save-dev babel-cli babel-preset-es2015 babel-preset-stage-2
  3. 修改package.json,使其包含以下脚本:

    {   "脚本":{     "开始":" babel-node script.js --presets es2015,stage-2"   } }

  4. 执行脚本npm run start。它将输出Hi, I am a Square. 2420