簡體   English   中英

從靜態方法ES6調用私有方法

[英]Invoking private method from static method ES6

我無法從類中的靜態方法調用私有或非靜態方法,下面是示例

class a {
 fun1(){
  console.log('fun1');
 }
 static staticfun(){
  console.log('staticfun');
  this.fun1();
 }
}

a.staticfun();

我試圖只暴露staticfun方法,它在內部調用所有私有方法,但這給了我this.fun1不是一個函數。 我試圖用'this'找到很多找到它的方法,但確實有效。

如何在靜態方法中調用私有實例方法?

fun1不是靜態函數,因此您需要定義a類的新實例才能調用它:

 class a { fun1() { console.log('fun1'); } static staticfun() { console.log('staticfun'); new this().fun1(); } } a.staticfun(); 

但是你應該注意到這不是一個好習慣。 您不應該依賴非靜態邏輯的靜態方法。

一種解決方法是,以實例通過a對靜電功能,但完全無視具有在第一位置的靜態方法的點。

首先,閱讀這個問題

有可能,您可以創建類a的實例,然后從實例中調用方法fun1

雖然,從靜態方法調用非靜態方法是沒有意義的。

static表示此方法屬於對象(不屬於實例)

 class a { fun1(){ console.log('fun1'); } static staticfun(){ console.log('staticfun'); const classInstance = new a() classInstance.fun1(); } } a.staticfun(); 

另一種方法是直接從類原型調用函數(意思是字面上的prototype屬性,而不是__proto__ ),如果你想避免實例化它。

class a {
 fun1(){
  console.log('fun1');
 }
 static staticfun(){
  console.log('staticfun');
  this.prototype.fun1();
 }
}

a.staticfun();

暫無
暫無

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

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