2016-06-24 4 views
2

これは私が達成しようとしている機能の非常に基本的な例です。私の問題は、 'greet'を呼び出すとappConfigは関数内にあるので 'this'に存在しないということです。'this'にアクセスするクラス内の関数

外部 'this'へのアクセスを維持し、appConfigを呼び出すにはどうしたらいいですか?私は外側の 'this'をselfのような変数に代入せずにこれを行うことを望んでいます。

class Greeter { 
 
\t 
 
\t static $inject = ['appConfig']; 
 
    constructor(
 
\t \t private appConfig: any 
 
\t) { 
 
    } 
 
\t 
 
    greet() { 
 
     return getMessage(); 
 
\t \t 
 
\t \t function getMessage() { 
 
\t \t \t return this.appConfig.value; 
 
\t \t } 
 
\t } 
 
}

+0

矢印機能は、独自の特定のユースケースを持っているので、この外側の関数で= VARの自己を試し、矢印の機能を使用しないでください。 –

+0

@AliTorabi具体的なユースケースは何ですか? –

+0

矢印機能は、「機能」をカプセル化しないで「コールバック」が必要な状況に適しています。 –

答えて

4

代わり矢印機能を使用することができます。クロージャのコンテキストを継承します。

class Greeter { 

    static $inject = ['appConfig']; 
    constructor(
    private appConfig: any 
) {} 

    greet() { 
    let getMessage =() => this.appConfig.value; 

    return getMessage(); 
    } 
} 

あなたは矢印機能hereの詳細を読むことができます。

この場合、クラス内に別のプライベートメソッドを作成して呼び出すことをお勧めしますが、

class Greeter { 

    static $inject = ['appConfig']; 
    constructor(
    private appConfig: any 
) {} 

    greet() { 
    return this.getMessage(); 
    } 

    private getMessage() { 
    return this.appConfig.value; 
    } 
} 
関連する問題