我正在尝试将this
应用于es6类的构造函数,以获得某种类似的“构造函数合并”:
class D {
constructor(name){
this.name=name
this.methodD=function(){}
}
}
class C extends D {
constructor(name,name2){
super(name)
this.name2=name2
}
}
function Custom(name,name2){
if (this instanceof Custom){
Function.prototype.bind.call(C.prototype.constructor,this,...arguments)
}
}
Custom.prototype.method=function(){}
const cc=new Custom('name','name2')
我希望使用与cc
相同的构造函数构建C
,因此获取cc.name='name';cc.methodD();
提前感谢您的帮助。
答案 0 :(得分:2)
您可以尝试在C
内创建Custom
的新实例,并使用es6 Object.setPrototypeOf()
重新定义原型。
请注意,在这种情况下,Custom
只返回将构建为C
的对象,其原型不包含C.prototype
和D.prototype
的方法,只有他们的自己的方法,例如methodD
类的D
。
另请注意,根据MDN文章,此方法可能会影响浏览器的性能。
class D {
constructor(name){
this.name=name
this.methodD=function(){}
}
}
class C extends D {
constructor(name,name2){
super(name)
this.name2=name2
}
}
function Custom(name,name2){
let cls = new C(...arguments);
Object.setPrototypeOf(cls, Custom.prototype);
return cls;
}
Custom.prototype.method=function(){}
const cc=new Custom('name','name2')
console.log(cc.name)
console.log(cc.name2)
console.log(cc.methodD)
console.log(cc instanceof Custom)