2016-08-18 76 views
0

我正在嘗試將幾個類的靜態和原型合併到1個主類中,如下例所示。es6類繼承

這實際上可能嗎? 我的目標是能夠合併靜態和原型做的事情一樣,即時通訊:

Alltogether.dosomething() 或Alltogether.o3.myoption1

// class1 
 
class Option1 { 
 
    constructor(properties) { 
 
     this.o = {}; 
 
     this.o.myoption1 = properties.o.myoption1; 
 
     this.o.myoption2 = properties.o.myoption2; 
 
    } 
 
    dosomething1() { 
 
     return "o1"; 
 
    } 
 
} 
 

 
// class2 
 
class Option2 { 
 
    constructor(properties) { 
 
     this.o2 = {}; 
 
     this.o2.myoption1 = properties.o2.myoption1; 
 
     this.o2.myoption2 = properties.o2.myoption2; 
 
    } 
 
    dosomething2() { 
 
     return "o2"; 
 
    } 
 
} 
 

 
// class3 
 
class Option3 { 
 
    constructor(properties) { 
 
     this.o3 = {}; 
 
     this.o3.myoption1 = properties.o3.myoption1; 
 
     this.o3.myoption2 = properties.o3.myoption2; 
 
    } 
 
    dosomething3() { 
 
     return "o3"; 
 
    } 
 
} 
 

 
// now i want to create a super class with the 3 classes above 
 
// however this doesnt work... 
 
class Alltogether extends (Option1, Option2, Option3) { 
 
    constructor(properties) { 
 
     //........ 
 
    } 
 
} 
 

 
// My goal is that im able to merge the statics and prototypes to do things like 
 
// Alltogether.dosomething() // o2 
 
// or Alltogether.o3.myoption1

+2

對象的點是,所以你不必定義這些1,2,3類。定義一個類選項,創建它們的實例(您的選項)。 AllTogether將擴展選項,具有所有選項繼承的原型方法。 –

+0

我只有一個問題。爲什麼? – christopher

回答

1

使簡單並使用composition over inheritance

class Option { 
    constructor(properties) { 
     this.myoption1 = properties.myoption1; 
     this.myoption2 = properties.myoption2; 
    } 
    dosomething() { 
     return "o"; 
    } 
} 

class Alltogether { 
    constructor(properties) { 
     this.o = new Option(properties.o) 
     this.o1 = new Option(properties.o1) 
     this.o2 = new Option(properties.o2) 
    } 
} 

如果您的dosomething實際上是不同的,你可以使用多個Option(子)類。如果沒有,你甚至應該考慮使用數組而不是三個編號的屬性。