2015-12-23 40 views
3

比如我有如何訪問其實例上的es-2015類方法?

class MyClass { 

    constructor() { 
    this.myMethod = this.myMethod.bind(this); 
    // ... some more code 
    // return what? 
    } 

    myMethod() { 
    this.myMethod2(); 
    // do stuff ... 
    } 

    myMethod2() { 
    // do stuff 2 ... 
    } 
} 

然後,我會做這樣的事情

let obj = new MyClass(); 

而我想要做的就是從obj

obj.myMethod(); 

訪問myMethod顯然,如果myMethod在其代碼中調用其他MyClass方法(如myMethod2),我希望一切按預期工作。所以我假設構造函數應該返回某種對象幷包含它的公共方法(可以訪問對象的私有方法),但是如何去做呢?

+0

我會推薦閱讀ES6類的一個很好的文檔。也許[this](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes)? – thefourtheye

+0

ES6類沒有私有方法,雖然它們可以通過將它們聲明爲構造函數的內部函數來創建,但是隻能從在構造函數中聲明的其他函數引用它們。你的構造函數不需要返回任何東西,因爲它隱式返回'this'。 – Alnitak

+1

你應該嘗試你的代碼,它的工作。 – Shanoor

回答

5

的唯一方法(我知道的),以在ES6類私有方法是將其定義爲構造函數的內部函數:

class MyClass { 
    constructor() { 
     let privateVar = 'foo'; 
     let privateMethod =() => { 
      return privateVar; 
     } 
    } 
} 

構造之外定義的任何方法都隱含公開。

可以訪問私有變量或方法唯一的公共方法是那些類似構造的詞法範圍內定義和連接到當前實例爲this屬性:

constructor() { 
    let privateVar = 'foo'; 
    let privateMethod =() => { 
     return privateVar; 
    } 
    this.publicMethod =() => { 
     return privateMethod(); 
    } 
} 

(請注意,使用的箭頭函數意味着this裏面的this.publicMethod將始終指向當前實例,而不需要任何.bind調用)

相關問題