// 实现一个链式调用
// hello.name("George").sleep(3).like("sports");
// log:I'm George
// 3s后log:sleep after 3s
// log:I like sports
思路:
根据要求构建new一个对象?
const hello = {}
在对象中构建函数name,sleep,like
const hello = {
name(name){},
sleep(time){},
like(sport){}
}
3.填充hello对象内部方法和参数,定义一个tasks数组保存任务,然后再从任务列表每次取出一个任务执行,如下:
const hello = {
tasks: [],
name(name) {
const fn = () => {
console.log(`I am ${name}`);
this.run();
};
this.tasks.push(fn);
return this;
},
sleep(time) {
const fn = () => {
setTimeout(() => {
console.log(`sleep after ${time}`);
this.run();
}, time * 1000);
};
this.tasks.push(fn);
return this;
},
like(sport) {
const fn = () => {
console.log(`I like ${sport}`);
this.run();
};
this.tasks.push(fn);
this.run();
return this;
},
// 取出任务执行
run() {
const fn = this.tasks.shift();
fn && fn();
},
};
4.执行结果
hello.name("George").sleep(3).like("sports");