2017-10-10 5 views
0

内部にネストした可能性のある他のメソッドを参照するメソッドが必要です。すべてのメソッドは同じオブジェクトに属します。次のコードは、私がしたいことすべてを説明しています:エラーは、これが未定義であるという問題があることを私に伝えます。私はmainFuncメソッドの中の "this"という単語がSomeClassのオブジェクトを参照していないことを理解しています。これらのパラメータを指定せずに - 私はこれを改善するためにどのように任意のアイデア、それはこれまでのところ、右溶液からだと感じていネストされたメソッドを持つメソッド参照のパラメータを持つメソッド

class SomeClass { 

    functionPop(this.mainFunc); 

    functionPop(func,nestedFunction) { 
    func(nestedFunction); 
    } 
    mainFunc(nestFunc) { 
    console.log('This will be printed'); 
    nestedFunction(); 
    } 
    nestedFunc() { 
    console.log('Here we are successfully - this will be printed'); 
    } 

} 

:私はこのような何かをやって、それを修正することができます知っていますか?

答えて

1

functionPop(this.mainFunc);のような関数参照を渡すと、関数内のコンテキスト(this)が呼び出される方法に基づいて変更されます。この場合、func()としてfunctionPopのコンテキスト内で呼び出されないため、thisundefinedになります。

functionPop(() => this.mainFunc()); 

またはコンテキストを設定するためにFunction.bindを使用します:

functionPop(this.mainFunc.bind(this)); 

これはコンテキストを保持します - あなたがそれらを渡しているときに、arrow functionで関数をラップすることができ、この問題を解決するには

また、Red Flags for thisを参照してください。

1

Javascriptでは 'this'は呼び出しコンテキストによって異なる場合があります。あなたのケースでは、コールコンテキストが失われているので、エラーが表示されます。

  1. 使用矢印機能:

    は、この問題を解決するには、いくつかの方法があります。通常のものとは反対に、 独自のコンテキスト(ES6機能)を作成しません。

  2. バインディングに必要なコンテキストをバインドするには 'bind'を使用します。可能なオプションのための例や長所/短所と詳細について

このリンクをチェックしてください。

https://github.com/Microsoft/TypeScript/wiki/%27this%27-in-TypeScript

関連する問題