ES6多重继承?

时间:2016-02-15 03:45:33

标签: javascript node.js ecmascript-6

有人可以解释以下有效ES6代码的含义吗?

'use strict';

class first {
    constructor() {
    }
}

class second {
    constructor() {
    }
}

class third extends (first, second) {
    constructor() {
        super();
    }
}

据我所知,JavaScript中没有多重继承,但示例中显示的语法不会抛出任何错误(在Node.js 4.3.0中),并且它有效,...... - 我试图理解的是什么,或者它究竟在做什么......

另外,我注意到如果我发出super()号注释,则代码会开始抛出错误ReferenceError: this is not defined

1 个答案:

答案 0 :(得分:4)

这只是comma operator的一个令人困惑的案例。

(1, 2) // 2
(1, 2, 3) // 3
(first, second) // second

它不会抛出错误,因为它有效的语法,但它不会在您预期的意义上工作third只会从second继承。

我们可以通过编译ES5语法来验证是否存在这种情况,以检查它是否影响了类定义。

var third = (function (_ref) {
  _inherits(third, _ref);

  function third() {
    _classCallCheck(this, third);

    _get(Object.getPrototypeOf(third.prototype), 'constructor', this).call(this);
  }

  return third;
})((first, second));

评估(first, second)的结果将从_ref传入,然后从third _inherits传入。