首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以从内置对象继承吗?

可以从内置对象继承吗?
EN

Stack Overflow用户
提问于 2017-08-07 12:34:39
回答 2查看 56关注 0票数 0

我尝试过在Javascript中实现继承的不同模式,但它们似乎都不适用于内置对象(如Set )。例如,使用MDN中描述的方法

代码语言:javascript
复制
function Test() {
    Set.apply(this, arguments);
}
Test.prototype = Object.create(Set.prototype, {});
Test.prototype.constructor = Test;

var test = new Test(["a", "b"]);

产生以下错误:

代码语言:javascript
复制
Uncaught TypeError: Constructor Set requires 'new'
    at Test.Set (native)
    at new Test (<anonymous>:2:9)
    at <anonymous>:1:9

这是有意义的,因为我的派生对象不包含本机Set实现。除了制作一个完整的包装器之外,还有支持这些操作的模式吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-07 12:59:15

您需要使用扩展并调用super,如下所示:

代码语言:javascript
复制
class mySet extends Set {
  constructor (iterable, name) {
    super(iterable);
    this.name = name;
  }

  // Read a Set property
  howMany () {
    return this.size;
  }

  // Call a Set method
  showEm () {
    this.forEach(v=>console.log(v));
  } 

  // Add your own methods
  // ...
}

var aSet = new mySet([0,1,2,3], 'aSet');

console.log(aSet.name);      // aSet
console.log(aSet.howMany()); // 4
aSet.showEm();               // 0 1 2 3

// Call set method directly
console.log(aSet.has(3));     // true

票数 1
EN

Stack Overflow用户

发布于 2017-08-07 12:41:16

我想是在要求设置构造函数。尝尝这个,

代码语言:javascript
复制
function Set(){
    // init stuff
}

function Test() {
    return new Set.apply(this, arguments);
}
Test.prototype = Object.create(Set.prototype, {});
Test.prototype.constructor = Test;

var test = new Test(["a", "b"]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45547044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档