2017-07-01 45 views
-1

我有一個JavaScript類如何製作JavaScript類方法的副本?

class A { 
    methodA(){ 
    //doing some operations with arguments 
    } 
    methodB(){ // i need to refer this function to `returns` function 
    } 
    // i am expecting something like below 
    methodB : A.methods.methodA 
    // NOT like below 
    methodB (...args){ 
    return this.methodA(...args); 
    } 
} 

即將作出的JavaScript類方法的副本最簡單的方法你知道嗎?

編輯:也請給一些解決方案,如果methodA和methodB將是一些static方法。

+2

如果即時更正'返回'關鍵字是[保留](https://www.w3schools.com/js/js_reserved.asp)。 –

+0

@JanCiołek更新了問題 – codeofnode

回答

2

你可以在類如外複製它們:

class A{ 
returns(){ 
} 
static returns(){ 
} 
} 

A.sth=A.returns; 
A.prototype.sth=A.prototype.returns; 

你也可以綁定在構造函數:

class A { 
constructor(){ 
    this.sth=this.returns.bind(this); 
} 
returns(){ 
//doing some operations with arguments 
} 
} 

(new A).sth() 

或者你可以添加兩個指針全局函數(沒有可能與類語法):

function returns(){ 
    return true; 
} 

function A(){} 
A.prototype={ 
returns:returns, 
sth:returns 
}; 
//static: 
Object.assign(A,{ 
returns:returns, 
sth:returns 
}); 

(new A).sth(); 
(new A).returns(); 
A.sth(); 
A.returns(); 
+0

不錯的方法,任何想法如果methodA和methodB會是類的靜態方法? – codeofnode

+0

@codeofnode類語法在JS中並不真正有用。我希望類屬性提案很快成爲規範的一部分(使這樣的東西更容易)。舊的方法函數構造函數語法也支持靜態方法,所以第二個代碼也可以使用靜態道具... –

+0

@codeofnode實際上它是可能的:/參見編輯 –