为什么此示例中的d.age()
不起作用?
function Dog(input) {
this.name = input;
this.color = function(){
return 'black';
}
this.age = function(){
setTimeout(function(){
return '10';
}, 500);
}
}
window.d = new Dog('Blacky');
答案 0 :(得分:1)
Javascript没有“等待”。您可以立即返回,也可以稍后执行回调:
function Dog(input) {
this.name = input;
this.color = function() {
return 'black';
}
// returning a value works just fine:
this.ageImmediate = function() {
return 10;
}
// but if we want to return after a delay, we have to use a callback
this.ageDelayed = function(cb) {
setTimeout(function(){
cb(10);
}, 500);
}
}
var d = new Dog('Blacky');
console.log("returned", d.ageImmediate());
d.ageDelayed(function(age) {
console.log("from callback", age);
});
答案 1 :(得分:1)
这可行,但不是您所期望的,您必须使用回调系统:
function Dog(input) {
this.name = input;
this.color = function(){
return 'black';
}
this.age = function(callback){
setTimeout(function(){
callback('10');
}, 500);
}
}
window.d = new Dog('Blacky');
d.age(function(age){
// do some stuff with age
});
另请查看jquery.deffered http://api.jquery.com/deferred.promise/
答案 2 :(得分:0)
当你调用age()时,超时开始并且函数返回undefined,因为你没有在函数中返回任何内容。然后在500毫秒后超时触发,该函数返回10.
所以我不知道你想要这个功能做什么。