具有以下内容:
function Person() {
this.name = "john";
this.getName = function() {
return this.name;
};
}
var me = new Person();
为什么要进行程序:
setTimeout(function(){alert(me.getName())}, 3000);
在执行过程中返回 john
:
setTimeout(me.getName(), 3000);
创建一个
Uncaught TypeError: Object [object DOMWindow] has no method 'getName'
最佳答案
问题是 setTimeout
将一个函数作为第一个参数。
在您的代码片段中:
setTimeout(function(){alert(me.getName())}, 3000);
您传入一个函数作为第一个参数,然后对其进行评估以执行警报。
在第二个片段中,您传递了调用函数的结果,因此:
setTimeout(me.getName(), 3000);
变成这样:
setTimeout('约翰', 3000);
由于 setTimeout
的工作方式,它允许您传入一个字符串作为第一个参数,运行时将尝试将其作为函数调用,从而导致错误。
关于javascript - 为什么从匿名函数调用方法时,这是对象,但直接调用会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934391/