我尝试了不同的东西,但我似乎在寻找一些过于明显的东西。尝试使用函数(方法)在对象内部返回的值,并在同一对象中使用setTimeout的另一个方法中使用它。
这是html:
<h1>3000</h1>
javascript(本例中为jQuery):
var foo = {
getValue: function() {
var h1Text = $('h1').text();
h1Text = parseInt(h1Text);
return h1Text;
},
useValue: function() {
var time = this.getValue();
var alertIt = alert('Hello');
setTimeout(alertIt,time);
}
};
foo.useValue();
// log shows correct value
console.log(foo.getValue());
// returns a number
console.log(typeof(foo.getValue()));
警报确实显示,但是在加载时而不是使用那些3秒。 它确实记录了正确的值并且还说它是一个数字所以我真的不确定我做错了什么。任何帮助表示赞赏。感谢
答案 0 :(得分:1)
setTiimeout
期望功能而不是变量。
同样var alertIt = alert('Hello');
这将返回undefined。
注意:var a = function()
会调用它并指定返回值。要使用参数为变量指定函数,请使用.bind
尝试alert.bind(null, "hello");
出于演示目的,我有延迟的硬编码值和注释getValue
代码。
var foo = {
getValue: function() {
//var h1Text = $('h1').text();
//h1Text = parseInt(h1Text);
return true// h1Text;
},
useValue: function() {
var time = 3000//this.getValue();
var alertIt = alert.bind(null,'Hello');
setTimeout(alertIt, time);
}
};
foo.useValue();
// log shows correct value
console.log(foo.getValue());
// returns a number
console.log(typeof(foo.getValue()));
答案 1 :(得分:1)
在useValue()
中,您调用alert('Hello')
,因此会立即执行,结果存储在alertIt
变量中。你应该把它放在像这样的函数中,因为setTimeout
期望一个函数作为第一个参数:
var alertIt = function() {
alert('Hello');
}
setTimeout(alertIt,time);