简单的JavaScript语法

时间:2013-10-18 06:08:32

标签: javascript

player对象有一个方法stopVideo()

1的

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

2的

setTimeout(stopVideo, 1000);

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

有什么不同,为什么会发生这种情况?

5 个答案:

答案 0 :(得分:3)

setTimeout函数的正确签名如下:

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

您的第二个示例有效,因为您实际上是在setTimeout调用中定义一个函数。

你的第一个例子实际上是这里的第二个签名。因此,要使它工作,你必须像处理代码一样处理它并将其作为字符串传递(类似于eval())。

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

以下是a link to the resource以及参数说明的摘录:

  • func 是您希望在延迟毫秒后执行的功能。
  • 备用语法中的
  • code 是您希望在延迟毫秒后执行的一串代码(使用此语法不推荐的原因与使用eval()

答案 1 :(得分:2)

如果我打开Chrome devtools控制台并粘贴

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

没有任何未定义的弹出窗口。我认为你需要提供更多的背景和更好的解释错误。您的stopVideo函数是否尝试访问this

答案 2 :(得分:0)

两者都是彼此的别名。 这应该有效:

setTimeout(player.stopVideo(), 1000);

答案 3 :(得分:0)

为什么1.不起作用。 这是因为在setTimeout(....)

之前没有定义player.stopVideo

为什么2.工作甚至玩家都没有定义。 当你声明一个函数stopVideo时,JS engerine会在开始时预定义这个函数。 stopVideo函数在setTimeout(...)之前定义。这样就可以了。

答案 4 :(得分:0)

#1不起作用的另一个原因: 当你将player.stopVideo传递给setTimeout时,该方法的“this”对象是“window”,而不是“player”。所以,可能,player.stopVideo不会工作。