是否可以从内置对象继承?

时间:2017-08-07 12:34:40

标签: javascript inheritance

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

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

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

产生以下错误:

Uncaught TypeError: Constructor Set requires 'new'
    at Test.Set (native)
    at new Test (<anonymous>:2:9)
    at <anonymous>:1:9

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

2 个答案:

答案 0 :(得分:1)

您需要使用 extends 并打电话给 super ,例如:

&#13;
&#13;
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
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我猜是要求Set构造函数。 试试这个,

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"]);