【问题标题】:cannot add method to Array subclass [duplicate]无法将方法添加到 Array 子类 [重复]
【发布时间】:2016-09-07 17:54:48
【问题描述】:

我正在尝试使用下面的代码对 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 中解释的那样。

【问题讨论】:

标签: javascript class babeljs es6-class


【解决方案1】:

修复:

class Collection extends Array {
  constructor(data) {
    super(...data);
    this.add = function(model) {
      this.push(model);
    }
  }
}

为什么:

Babel 不支持扩展原生类。它在 5.2.17 版本中被移除(参见这个提交)

由于无法正常工作而被删除,请参阅错误:https://phabricator.babeljs.io/T1424

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

参考:Link

【讨论】:

  • 如果有重复的内容,请将其标记为重复,请勿复制粘贴其他人的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多