Я пытаюсь добавить в объект метод сна, который можно вызвать в середине цепочки методов. Я решил использовать setTimeout (), но поток javascript не может быть заблокирован, и он не может выводить нужный мне порядок.
<div id="test"></div>
function hello(str){
var text = document.getElementById("text");
this.eat = function(kind){
text.innerHTML += "<p>Eat "+ kind + "</p>";
return this;
}
this.sleep = function(delay){
setTimeout(function(){
text.innerHTML += "<p>Sleep "+delay + "</p>";
}, delay);
return this;
}
text.innerHTML += "<p>Hello, "+ str + "</p>";
return this;
}
var test = hello("guy").sleep(3000).eat("dinner");
/* I want an output as:
Hello, guy -> (wait 3 secs) Sleep 3000 -> Eat dinner
But actually the output is:
Hello, guy -> Eat dinner -> (wait 3 secs) Sleep 3000
*/
Есть у кого-нибудь идеи по этому поводу? Должен ли я использовать прототип или какие-то другие способы с этим справиться? Более того, если я хочу добавить в этот объект еще один метод с именем sleepFirst
. Когда я называю это так:
var test2 = hello("boys").sleepFirst(2000).eat("lanch")
он выводит:
(подождите 2 секунды) sleepFirst 2000 -> Hello, boys -> Eat lanch
Что мне делать?
(Постскриптум: я новичок в веб-разработке, возможно, кто-то уже задавал аналогичный вопрос раньше, но я долго искал и не мог найти его T ^ T Я китаец и извините, что мой английский может показаться не очень хорошим. Спасибо ~~)