我尝试过在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
实现。除了制作完整的包装器之外,是否有支持这些操作的模式?
答案 0 :(得分:1)
您需要使用 extends 并打电话给 super ,例如:
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;
答案 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"]);