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);
您的第二个示例有效,因为您实际上是在 setTimeout 调用中定义一个函数。
你的第一个例子实际上是这里的第二个签名。因此,要使其正常工作,您必须像处理代码一样处理它并将其作为字符串传递(类似于 eval() )。
setTimeout( "player.stopVideo()", 1000 );
这是资源的链接和参数描述的摘录:
func
是要在延迟毫秒后执行的函数。code
在替代语法中是要在延迟毫秒后执行的代码字符串(不推荐使用此语法,原因与使用相同eval()
)如果我打开 Chrome devtools 控制台并粘贴
var player = { stopVideo: function() { console.log('ohai'); }}
setTimeout(player.stopVideo, 1000);
没有任何未定义的弹出。我认为您需要提供更多背景信息并更好地解释问题所在。您的 stopVideo 功能是否正在尝试访问this
?
#1 不起作用的另一个原因:当您将 player.stopVideo 传递给 setTimeout 时,该方法的“this”对象是“window”,而不是“player”。所以,可能 player.stopVideo 不起作用。
为什么 1. 不起作用。这是因为在 setTimeout(....) 之前没有定义 player.stopVideo
为什么 2. 即使没有定义播放器也可以工作。当你声明一个函数 stopVideo 时,JS 引擎会在开始时预定义这个函数。stopVideo 函数在 setTimeout(...) 之前定义。这样就可以了。
两者互为别名。这应该有效:
setTimeout(player.stopVideo(), 1000);