2016-08-18 36 views
0

如何從父類的靜態方法調用子類的靜態方法?如何在JavaScript中調用靜態子類方法

class A { 

    static foo(){ 
    // call subclass static method bar() 
    } 
} 

class B extends A { 

    static bar(){ 
    // do something 
    } 
} 

B.foo() 

更新

爲什麼我想這是一個子類會工作最好的,因爲在我的情況下單身,我想在A.使用template method pattern原因

由於它看起來像我無法從靜態上下文中獲取對子類的引用現在我正在導出A的子類實例,它的工作原理也是如此。謝謝。

更新2

是的,這是一個重複的程度(其它問題不涉及子類)。該參考,即使從靜態的上下文,是this。所以這個工程:

static foo(){ 
    this.bar(); 
} 
+1

我相信你有javascript有點困惑,https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes – Derek

+0

可以@你指向一個特定的部分,請? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Static_methods – hcvst

+0

你想達到什麼目的?你沒有在子類中的基類中聲明任何東西。所以調用'B.foo()'不會返回任何東西。 – Dandy

回答

0

我有點困惑你的需要,因爲它似乎你已經得到你需要做的B.foo()。那麼,這是你需要的嗎?

class A { 

    static foo(){ 
    // call subclass static method bar() 
    // Because it is "static" you reference it by just calling it via 
    // the class w/o instantiating it. 
    B.bar() 

    } 
} 

class B extends A { 

    static bar(){ 
    // do something 
    console.log("I am a static method being called") 
    } 
} 

// because "foo" is static you can call it directly off of 
// the class, like you are doing 
B.foo() 

// or 
var D = new B() 
D.bar() // won't work ERROR 
A.foo() // Works <-- Is this is specifically what you are asking? Or 
     // calling it in the Super class like B.bar(), that is done in static method foo? 

這是你在問什麼?如果這不能回答你的問題,請讓我知道我的誤解,我會盡力回答。謝謝。

+0

謝謝@james。因爲'A'可以有不同的子類,所以不用明確地調用'B.bar()'我會喜歡調用類似'subClassRef.bar()'的東西。 – hcvst

相關問題