2017-08-16 80 views
0

我有三個類,其中兩個擴展了第三個類。是否有可能以某種方式(不同於手動)將擴展類的名稱分配給超級構造函數?在構造函數中保存擴展類的'方法'名稱

class Master { 

    constructor(options) { 
     this.methods = Object.getOwnPropertyNames(Master.prototype); 
    } 

    getMethods() { 
     return Object.getOwnPropertyNames(Master.prototype); 
    } 

} 

class SlaveOne extends Master { 
    constructor(options) { 
     super(options); 
    } 
    methodOne() {} 
    methodTwo() {} 
} 

class SlaveTwo extends Master { 
    constructor(options) { 
     super(options); 
    } 
    methodThree() {} 
    methodFour() {} 
} 

所以,我要的是有兩種方法,或在大師班this.methods分配,這將:

  • 回報['constructor', 'methodOne', 'methodTwo']叫上SlaveOne實例時;
  • 返回['constructor', 'methodThree', 'methodFour']當在SlaveTwo的實例上調用時;或者叫做對SlaveOneSlaveTwoMaster實例時

我當前的代碼將返回相同['constructor', 'getMethods']。有任何想法嗎?

+0

剛剛獲得this'對象的'所有方法,它繼承的原型。 – Bergi

回答

1

像這樣的東西應該做的伎倆

class Master { 
 

 
    getMethods() { 
 
     return Object.getOwnPropertyNames(this.constructor.prototype); 
 
    } 
 

 
} 
 

 
class SlaveOne extends Master { 
 
    constructor(options) { 
 
     super(options); 
 
    } 
 
    methodOne() {} 
 
    methodTwo() {} 
 
} 
 

 
class SlaveTwo extends Master { 
 
    constructor(options) { 
 
     super(options); 
 
    } 
 
    methodThree() {} 
 
    methodFour() {} 
 
} 
 

 
console.log(new SlaveOne().getMethods(), new SlaveTwo().getMethods())

+0

非常感謝,正是我需要的。 – wscourge

+1

更好地使用'Object.getPrototypeOf(this)'而不是'this.constructor.prototype' – Bergi

+0

@Bergi只是想知道爲什麼它在給定的情況下更好。這裏可能會出現'this.constructor.prototype'錯誤? –