Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ES6多重继承?_Javascript_Node.js_Ecmascript 6 - Fatal编程技术网

Javascript ES6多重继承?

Javascript ES6多重继承?,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,有人能解释一下以下有效ES6代码的含义吗 'use strict'; class first { constructor() { } } class second { constructor() { } } class third extends (first, second) { constructor() { super(); } } 据我所知,JavaScript中没有多重继承,但是示例中显示的语法没有抛出任何错误(在

有人能解释一下以下有效ES6代码的含义吗

'use strict';

class first {
    constructor() {
    }
}

class second {
    constructor() {
    }
}

class third extends (first, second) {
    constructor() {
        super();
    }
}
据我所知,JavaScript中没有多重继承,但是示例中显示的语法没有抛出任何错误(在Node.js 4.3.0中),并且它可以工作,…-我想了解的是什么,或者它到底在那里做什么


另外,我注意到,如果我注释掉
super()
调用,那么代码开始抛出错误
ReferenceError:这是未定义的

这只是一个令人困惑的例子

它不会抛出错误,因为它的语法是有效的,但是它在您期望的意义上也不起作用<代码>第三个
将仅从第二个继承

我们可以通过编译为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));

计算
(第一个,第二个)
的结果作为
\u ref
传递,然后
第三个
\u继承它。

这只是一个令人困惑的例子

它不会抛出错误,因为它的语法是有效的,但是它在您期望的意义上也不起作用<代码>第三个
将仅从第二个继承

我们可以通过编译为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));

计算
(第一个,第二个)
的结果作为
\u ref
传递,然后
第三个
\u继承它。

@Tushar该问题是关于巴贝尔的,这是关于ES6的。
(第一个,第二个)
是逗号运算符,计算结果是
第二个
<代码>第一个
被扔掉了。这个问题与巴贝尔无关。Babel只是一个工具/库,在浏览器不支持ES6的早期使用。@torazaburo如果我们删除括号并只使用
第一、第二个
,Node.js将拒绝此类代码,这纯粹是Babel语法。任何ES6处理器都会拒绝没有paren的代码。至于您最初的问题,只要看一下Babel生成的ES5代码就应该清楚了。@Tushar那个问题是关于Babel的,这个问题是关于ES6的。
(第一,第二)
是逗号运算符,计算结果是
第二
<代码>第一个
被扔掉了。这个问题与巴贝尔无关。Babel只是一个工具/库,在浏览器不支持ES6的早期使用。@torazaburo如果我们删除括号并只使用
第一、第二个
,Node.js将拒绝此类代码,这纯粹是Babel语法。任何ES6处理器都会拒绝没有paren的代码。至于你最初的问题,只要看看Babel生成的ES5代码就应该清楚了。你确定吗?如果我们注释掉
super()
,那么代码开始抛出错误:
ReferenceError:这是未定义的
。但是看起来只有第二个是继承的。是的,我确定。看看编译后的ES5版本。这开始有意义了,尽管从语法的角度看,这确实令人困惑。它并不比逗号运算符的任何其他用法更令人困惑。你确定吗?如果我们注释掉
super()
,那么代码开始抛出错误:
ReferenceError:这是未定义的
。但是看起来只有第二个是继承的。是的,我确定。看看编译后的ES5版本。这开始有意义了,尽管从语法的角度来看,这确实令人困惑。它并不比逗号运算符的任何其他用法更令人困惑。