6

これを機能させるにはどうすればよいですか:

class TestClass {

   doMethod1 (arg1, arg2, cb)
   {
      this.doMethod2(arg1, arg2, function (result){cb (result)});
   }

  doMethod2 (arg1, arg2, cb) {
      this.doMethod3(arg1, arg2, function(result){cb (result)});
   }

  doMethod3 (arg1, arg2, cb) {
      var result = arg1 + arg2;
      cb(result);
   }
}

テスト = 新しい TestClass;

test.doMethod3(1,1, cb); test.doMethod2(1,1,cb);

どちらも機能します。

test.doMethod1(1,1,cb);

編集:実際、それは機能します。

「太い矢印」構文を使用して、関連する字句スコープの問題を回避しました。

doMethod1 (arg1, arg2, cb)
   {
      this.doMethod2(arg1, arg2, (result) => {cb (result)});
   }

doMethod1 の「this」が匿名コールバック関数の「this」と同じであることを確認します。

4

1 に答える 1

11

TypeScript でのレキシカル スコープを保持するにはthis、アロー関数式を使用します。

これらは、TypeScript 言語仕様のセクション 4.9.2 で定義されています。

ArrowFormalParameters => { return AssignmentExpression ; }

コードは次のようになります。

() => { alert(this.arg1); }
于 2012-10-26T08:28:20.390 に答える