setIntervalを使用して他のメソッドによって呼び出されたメソッドは、jsのオブジェクトプロパティにアクセスできません

atevm

2つのメソッドを使用してオブジェクトコンストラクター関数を作成しました。一方はsetInterval(functionName、interval)を介して他方を呼び出しますが、呼び出された関数はオブジェクトのプロパティを取得できません。

私はcodepenで簡単な例を書きました:http://codepen.io/AttilaVM/pen/ZQPVEy

function Test(value) {
    this.value = value

    this.action = function testAction() {
        console.log(this.value); // gives undefined!
    }

    this.play = function testPlay() {
        setInterval(this.action, 500);
    }
}

var test = new Test(20);
test.play();

メソッドがsetIntervalなしで呼び出された場合、期待どおりに機能します。なぜ違うのですか?呼び出されたメソッドはどのようにしてオブジェクトのプロパティにアクセスできますか?

レーヨン

thiswindow呼び出されていることを指しますsetInterval(window.setInterval)

現在のコンテキストを渡すには、Use .bind(this)bind()メソッドを作成します。この関数を呼び出すと、thisキーワードが指定された値に設定されます。

function Test(value) {
  this.value = value

  this.action = function testAction() {
    console.log(this.value);
  }

  this.play = function testPlay() {
    setInterval(this.action.bind(this), 500);
  }
}

var test = new Test(20);
test.play();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ