无法向Array子类添加方法

时间:2016-09-07 17:54:48

标签: javascript class babeljs es6-class

我正在尝试使用下面的代码继承Array对象。如果您在浏览器中运行代码,它可以正常工作。但是,如果我将此代码放在.js文件中,并将该文件包含<script>标记,则.add()方法未定义。

class Collection extends Array {
  constructor(data) {
    super(...data);
  }

  add(model) {
    this.push(model);
  }

}

const coll = new Collection(['item1', 'item2']);

console.log(coll);      // -> ['item1', 'item2']
console.log(coll.add);  // -> undefined

加载页面时,.add()未定义。但是,当我将完全相同的代码复制粘贴到控制台中时,它就能正常工作。

发生了什么事?

更新 我也在使用Babel.js(v6.x)进行转换,结果证明这是问题所在,正如Fuechter在his answer中解释的那样。

1 个答案:

答案 0 :(得分:1)

修正:

a.cc: In function ‘cplx f(const std::vector<__gmp_expr<__mpz_struct [1], __mpz_struct [1]> >&, const cplx&)’:
a.cc:40:40: warning: comparison of unsigned expression >= 0 is always true [-Wtype-limits]
     for (unsigned int k=coeff.size(); k>=0; --k)
                                       ~^~~

为什么:

Babel不支持扩展本机类。它已在5.2.17版本中删除(请参阅此提交)

它已被删除,因为它无法正常工作,请参阅错误:https://phabricator.babeljs.io/T1424

它不太可能被添加,因为它不是可以模拟的功能。我们将不得不等待浏览器中的本机支持(一些已经在实验模式中支持它)。这也意味着它目前在不同浏览器中的表现会有所不同。

参考:Link