如下面的代码,我创建一个名为" test"的对象,并为其提供属性和方法。
该财产来自其论点。
我尝试在onload后每2秒调用一次该方法,结果显示未定义。
但是如果我只调用不使用setInterval()的方法,就像这样
window.onload = function() {
giveword.showWord();
}
我能够显示文字"嗨" ..为什么会这样?
var giveword = new test("Hi");
function test(word) {
this.word = word;
}
test.prototype.showWord = function() {
document.getElementById("msg_box").innerHTML = this.word;
}
window.onload = function() {
setInterval(giveword.showWord, 2000);
}
感谢您的帮助...
答案 0 :(得分:2)
原因是因为在你的test.prototype.showWord函数中,你的this
对象指的是调用函数的上下文,它是从setInterval调用时的窗口对象。
我认为你想要做的是使用一个闭包来使showWord()的上下文成为这样的giveword实例:
var giveword = new test("Hi");
function test(word) {
this.word = word;
}
test.prototype.showWord = function() {
document.getElementById("msg_box").innerHTML = this.word;
}
window.onload = function(){
setInterval(function(){giveword.showWord();}, 2000); // <<-- here's the closure
}
不同之处在于,对于闭包,您告诉setInterval函数在上下文中调用函数,就像声明setInterval时一样。当声明setInterval时,在范围内有一个名为giveword的变量,它有一个方法showWord(),它返回初始输入的值。 (关闭很难解释,如果你需要更多信息,我担心你会得到最好的服务解释他们。)