JS实现lazyMan

这篇博客探讨了如何使用JavaScript来实现LazyMan,一个有趣的编程题目。虽然表面看起来简单,但在实际编码过程中发现具有一定挑战性。作者分享了具体的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看到一个有意思的题目,使用JS实现LazyMan
具体效果如下:

LazyMan('xx');
// Hello  xx
LazyMan('xx').eat('dinner');
//Hello xx
// Eat dinner ~~
LazyMan('xx').sleep(3000).eat('dinner');
//Hello xx
//Sleep 3000 ~~~
// Eat dinner ~~
LazyMan('xx').sleep(3000).eat('dinner').sleepFirst(2000);
//FirstSleep  2000 ~~~
//Hello xx
//Sleep 3000 ~~~
// Eat dinner ~~

看似很简单,实际实现起来还是有点意思的, 下面给出具体实现


function LazyMan( name ){
	return new _lazyMan( name )
}

function _lazyMan(name){
	this.task = [];
	var fn = (name=>{
		return  ()=>{
			console.log(`Hello  ${name}`);
			this.next()
		}
	})(name);
	
	this.task.push(fn);
	setTimeout( ()=>{
		this.next();
	}, 0)
}	

_lazyMan.prototype = {
	next: function(){
		var fn = this.task.shift();
		fn && fn();
	},
	eat: function(food){
		var fn = (food=>{
			return ()=>{
				console.log(`Eat ${food}`);
				this.next();
			}
		})(food);
		this.task.push(fn);
		return this;
	},
	sleep: function(time){
		var fn = (time=>{
			return ()=>{
				console.log(`Sleep ${time}`);
				setTimeout(()=>{
					this.next();
				}, time);								
			}
		})(time);
		this.task.push(fn);
		return this;
	},
	sleepFirst: function(time){
		var fn = (time=>{
			return ()=>{
				console.log(`FirstSleep ${time}`);
				setTimeout(()=>{
					this.next();
				}, time);								
			}
		})(time);
		this.task.unshift(fn);
		return this;
	}
}

// LazyMan('Hack');

// LazyMan('Hack').eat('dinner');

// LazyMan('Hack').sleep(2000).eat('dinner').sleepFirst(3000);

LazyMan("Joe").sleepFirst(3000).eat("breakfast").sleep(1000).eat("dinner");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值