本文主要是介绍手写题之链式调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
根据这个类Demo,输出下面内容
// 实现一个 LazyMan 类class LazyMan{constructor(name) {console.log(name);this.name = name}}new LazyMan('Hank').sleep(10).eat('dinner').sleep(10).eat('dinner')// 输出
// Hank
// 等待10s
// dinner
// 等待10s
// dinner
先自己写写吧....
伪代码写下思路
1.定义sleep和eat函数
2.考虑到链式调用,要return this
3.**因为考虑到event loop的概念,等待10秒后执行下面的**
解决方法:定义内置函数,保存在栈内,点完添加完后一个个执行
完整代码
class LazyMan{constructor(name) {console.log(name);this.name = namethis.tasks = []setTimeout(() => {this.next()}, 0)}next() {if(this.tasks.length > 0) {const task = this.tasks.shift()task()}}sleep(time) {// const fn = (() => {// setTimeout(() => {// console.log(`等待了${time}秒`);// this.next()// }, time * 1000)// })// this.tasks.push(fn)setTimeout(() => {console.log(`等待了${time}秒`);}, time * 1000)return this}eat(food) {// const fn = (() => {// console.log(`吃${food}`);// this.next()// })// this.tasks.push(fn)console.log(`吃${food}`);return this}}new LazyMan('Hank').sleep(10).eat('dinner').sleep(10).eat('dinner')
这篇关于手写题之链式调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!