在 object 方法链中添加睡眠方法(JS)
Add a sleep method in a object method chain(JS)
我正在尝试在 object 中添加一个睡眠方法,它可以在方法链的中间调用。我考虑过使用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
*/
有没有人对此有任何想法?我应该使用原型还是其他一些方法来处理它?更重要的是,如果我想在这个object中添加另一个方法,命名为sleepFirst
。当我这样称呼它时:
var test2 = hello("boys").sleepFirst(2000).eat("lanch")
它输出:
(等待 2 秒)sleepFirst 2000 -> 你好,孩子们 -> Eat lanch
我该怎么办?
(后记:我是Web Development的初学者,可能以前有人问过类似的问题,但是我找了很久都没有找到T^T我是中国人,抱歉我的英文可能不太好很好。谢谢~~)
@RobG 说服我使用真实对象定义重写您的代码。 JsFiddle here.
var sleeper = {
text: document.getElementById("text"),
eat: function (kind) {
text.innerHTML += "<p>Eat " + kind + "</p>";
return this;
},
sleep: function (delay, func, param) {
setTimeout(function () {
func(param);
//text.innerHTML += "<p>Sleep " + delay + "</p>";
}, delay);
return this;
},
hello: function (str) {
text.innerHTML += "<p>Hello, " + str + "</p>";
return this;
}
};
sleeper.hello("guy").sleep(3000, sleeper.eat, "dinner");
好多了。但这样一来,您将无法执行一连串的多个调用。
我正在尝试在 object 中添加一个睡眠方法,它可以在方法链的中间调用。我考虑过使用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
*/
有没有人对此有任何想法?我应该使用原型还是其他一些方法来处理它?更重要的是,如果我想在这个object中添加另一个方法,命名为sleepFirst
。当我这样称呼它时:
var test2 = hello("boys").sleepFirst(2000).eat("lanch")
它输出:
(等待 2 秒)sleepFirst 2000 -> 你好,孩子们 -> Eat lanch
我该怎么办?
(后记:我是Web Development的初学者,可能以前有人问过类似的问题,但是我找了很久都没有找到T^T我是中国人,抱歉我的英文可能不太好很好。谢谢~~)
@RobG 说服我使用真实对象定义重写您的代码。 JsFiddle here.
var sleeper = {
text: document.getElementById("text"),
eat: function (kind) {
text.innerHTML += "<p>Eat " + kind + "</p>";
return this;
},
sleep: function (delay, func, param) {
setTimeout(function () {
func(param);
//text.innerHTML += "<p>Sleep " + delay + "</p>";
}, delay);
return this;
},
hello: function (str) {
text.innerHTML += "<p>Hello, " + str + "</p>";
return this;
}
};
sleeper.hello("guy").sleep(3000, sleeper.eat, "dinner");
好多了。但这样一来,您将无法执行一连串的多个调用。