有人可以解释以下有效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
。
答案 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
传入。