2016-11-23 84 views
0

我試圖創建一個生成新實例的靜態函數。該實例屬於靜態函數所屬的類。es6從靜態函數獲取對類構造函數的訪問

下面是一個例子

class A { 
    static getInstance() { 
    return new A(); 
    } 
} 

到目前爲止好let a = A.getInstance();將正常工作。

我想在children類中繼承這個功能。

class B extends A {} 
let b = B.getInstance(); // This will return an instance of A. 

我想B.getInstance()返回B.

+1

'的getInstance(){返回新本; }' – Keith

回答

1

的實例,這似乎是工作。我想,你希望這是你想傳遞一個類,某種構造/發電機。因爲做new A()顯然比較簡單一些。

class A { 
 
    sayIt() { console.log('I am A'); } 
 
    static getInstance() { 
 
    return new this; 
 
    } 
 
} 
 

 
class B extends A { sayIt() { console.log('I am B') } } 
 

 
var k = A.getInstance(); 
 
k.sayIt(); 
 

 
let b = B.getInstance(); 
 
b.sayIt(); 
 

 
let k2 = new A(); 
 
k2.sayIt(); 
 

 
let b2 = new B(); 
 
b2.sayIt();

+0

感謝Keith的關注。它確實有效。爲了建立你的答案,如果你改變sayIt()爲靜態,你可以用'我是$ {this.name}'代替'我是B',它會打印它所屬的類:)正好解決了我的問題。再次感謝。 – SagiSergeNadir