player
オブジェクトにはメソッドがありますstopVideo()
1.誤り
setTimeout(player.stopVideo, 1000); //says something is undefined
2.真
setTimeout(stopVideo, 1000);
function stopVideo() {
player.stopVideo();
}
違いは何ですか?なぜこれが起こっているのですか?
player
オブジェクトにはメソッドがありますstopVideo()
1.誤り
setTimeout(player.stopVideo, 1000); //says something is undefined
2.真
setTimeout(stopVideo, 1000);
function stopVideo() {
player.stopVideo();
}
違いは何ですか?なぜこれが起こっているのですか?
setTimeout 関数の正しい署名は次のとおりです。
var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
var timeoutID = window.setTimeout(code, delay);
2 番目の例は、setTimeout 呼び出し内で実際に関数を定義しているため機能します。
最初の例は、実際にはここでの 2 番目の署名です。したがって、それが機能するには、コードであるかのように処理し、文字列として渡す必要があります ( eval() と同様)。
setTimeout( "player.stopVideo()", 1000 );
リソースへのリンクとパラメータの説明からの抜粋を次に示します。
func
delay ミリ秒後に実行する関数です。code
別の構文では、 delay ミリ秒後に実行するコードの文字列です (この構文の使用は、 の使用と同じ理由で推奨されませんeval()
) 。Chrome devtools コンソールを開いて貼り付けると
var player = { stopVideo: function() { console.log('ohai'); }}
setTimeout(player.stopVideo, 1000);
未定義のものは何もポップアップしません。もう少しコンテキストを提供し、何が問題なのかをより適切に説明する必要があると思います。あなたの stopVideo 関数はアクセスしようとしていますthis
か?
どちらもお互いのエイリアスです。これはうまくいくはずです:
setTimeout(player.stopVideo(), 1000);
#1 が機能しないもう 1 つの理由: player.stopVideo を setTimeout に渡すと、メソッドの「this」オブジェクトは「player」ではなく「window」になります。したがって、おそらく player.stopVideo は機能しません。