簡體   English   中英

將此綁定到es6類構造函數

[英]Bind this to es6 class constructor

我正在嘗試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')

我期望使用與C相同的構造函數構造cc ,因此獲取cc.name='name';cc.methodD();

預先感謝您的幫助。

您可以嘗試使用es6 Object.setPrototypeOf()Custom內部創建C新實例並重新定義原型。

請注意,在這種情況下, Custom將僅返回將構造為C對象,並且其原型將不包含C.prototypeD.prototype的方法,僅包含它們自己的方法,例如D類的methodD

另請注意,根據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) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM