0

playerオブジェクトにはメソッドがありますstopVideo()

1.誤り

setTimeout(player.stopVideo, 1000); //says something is undefined

2.

setTimeout(stopVideo, 1000);

function stopVideo() {
    player.stopVideo();
}

違いは何ですか?なぜこれが起こっているのですか?

4

5 に答える 5

3

setTimeout 関数の正しい署名は次のとおりです。

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
var timeoutID = window.setTimeout(code, delay);

2 番目の例は、setTimeout 呼び出し内で実際に関数を定義しているため機能します。

最初の例は、実際にはここでの 2 番目の署名です。したがって、それが機能するには、コードであるかのように処理し、文字列として渡す必要があります ( eval() と同様)。

setTimeout( "player.stopVideo()", 1000 );

リソースへのリンクとパラメータの説明からの抜粋を次に示します。

  • funcdelay ミリ秒後に実行する関数です。
  • code別の構文では、 delay ミリ秒後に実行するコードの文字列です (この構文の使用は、 の使用と同じ理由で推奨されませんeval()) 。
于 2013-10-18T06:12:43.577 に答える
2

Chrome devtools コンソールを開いて貼り付けると

var player = { stopVideo: function() { console.log('ohai'); }}
setTimeout(player.stopVideo, 1000);

未定義のものは何もポップアップしません。もう少しコンテキストを提供し、何が問題なのかをより適切に説明する必要があると思います。あなたの stopVideo 関数はアクセスしようとしていますthisか?

于 2013-10-18T06:16:51.353 に答える
0

どちらもお互いのエイリアスです。これはうまくいくはずです:

setTimeout(player.stopVideo(), 1000);
于 2013-10-18T06:26:18.990 に答える
0

#1 が機能しないもう 1 つの理由: player.stopVideo を setTimeout に渡すと、メソッドの「this」オブジェクトは「player」ではなく「window」になります。したがって、おそらく player.stopVideo は機能しません。

于 2013-10-18T09:33:46.087 に答える