zoukankan      html  css  js  c++  java
  • 实现LazyManInit('Tony').eat('rice').sleep(1000).sleepFirst(2000)

    代码是参考别人的,我就加点我写的时候不理解的地方吧。

    function LazyMan(name) {
      this.taskList = [];
      console.log(`I am ${name}`);
       setTimeout(() => {
        this.next();
      }, 0)  //setTimeout是异步任务,js会先执行同步任务,这里的同步任务就是把要执行的所有任务推入一个数组。
    }
    
    
    LazyMan.prototype.next = function () {
      if (this.taskList.length > 0) {
        this.taskList.shift()(); //从数组的第一个任务开始执行。
      }
    }
    
    LazyMan.prototype.eat = function (food) {
      this.taskList.push(() => {
        console.log(`I am eating ${food}`);
        this.next();  //每个任务执行完弹出下一个任务,这样当前的js执行栈只有这一个任务,就不会出现任务执行顺序错乱。
      })
      return this;
    }
    
    LazyMan.prototype.sleep = function (time) {
      this.taskList.push(() => {
        setTimeout(() => {
          console.log(`等待 ${time / 1000} 秒`)
          this.next();
        }, time);
      })
      return this;
    }
    
    LazyMan.prototype.sleepFirst = function (time) {
      this.taskList.unshift(() => {
        setTimeout(() => {
          console.log(`先等待 ${time / 1000} 秒`)
          this.next();
        }, time)
      }) //将sleepFirst推入第一个任务,让它不管在什么位置都第二个执行
      return this;
    }
    
    function LazyManInit(name) {
      return new LazyMan(name)
    }
    
    LazyManInit('Tony').eat('rice').sleep(1000).sleepFirst(2000);
  • 相关阅读:
    流畅的python——2 数据结构
    流畅的python——1 数据模型
    cpp3 std::bind
    cpp2 std::forward
    什么是 jQuery EasyUI?
    .Core中什么事依赖注入?
    .net 中datetime? 和 datetime 有什么区别?
    C#生成项目失败 错误列表 CS2001 未能找到源文件 “D:XXXXXX.cs”。
    Docker笔记
    ICollection与IEnumerable
  • 原文地址:https://www.cnblogs.com/userGao/p/14148439.html
Copyright © 2011-2022 走看看