美文网首页
实现lazyMan

实现lazyMan

作者: Ray1214 | 来源:发表于2017-04-08 16:53 被阅读0次

涉及的知识点:

  1. 流程控制:创建task任务队列,使用push、shift、unshift方法操作任务
  2. 闭包:当闭包中的值引用自闭包外部,那么这些值会始终存放在内存中。下面例子中的nametime都会保存在内存中,不至于访问时为undefined
      function _lazyMan (name) {

        // 创建一个任务队列
        this.task = [];
        let self = this;

        let fn = (function (name) {
          return function () {
            console.log(`Hi! This is ${name}!`);
            // 执行下一个任务
            self.next();
          };
        })(name);
        this.task.push(fn);
        // 在下一个事件循环启动任务
        setTimeout(function () {
          self.next();
        }, 0);
      }

      _lazyMan.prototype.next = function () {
        let fn = this.task.shift();
        fn && fn();
      };

      _lazyMan.prototype.sleepFirst = function (time) {
        let self = this;
        let fn = (function (time) {
          return function () {
            setTimeout(function () {
              console.log(`Wake up after ${time}s!`);
              self.next();
            }, time * 1000);
          }
        })(time);
        this.task.unshift(fn);
        return this;
      }

      _lazyMan.prototype.sleep = function (time) {
        let self = this;
        let fn = (function (time) {
          return function () {
            setTimeout(function () {
              console.log(`Wake up after ${time}s!`);
              self.next();
            }, time * 1000);
          }
        })(time);
        this.task.push(fn);
        return this;
      }

      _lazyMan.prototype.eat = function (name) {
        let self = this;
        let fn = (function (name) {
          return function () {
            console.log(`Eat ${name}~`)
            self.next();
          }
        })(name);
        this.task.push(fn);
      }

      function lazyMan (name) {
        return new _lazyMan(name);
      }

      lazyMan('17khba').sleepFirst(10).eat('lunch');

相关文章

  • js重点与难点(转)

    javascript LazyMan实现LazyMan(什么是LazyMan?请自行google)function...

  • LazyMan的实现

    题目介绍 实现一个 LazyMan,可以按照以下方式调用:LazyMan("Hank") 输出:Hi! This ...

  • lazyman

    实现一个LazyMan,可以按照以下方式调用:LazyMan(“Hank”)输出:Hi! This is Hank...

  • LazyMan 实现...

    // 实现一个LazyMan,可以按照以下方式调用:// LazyMan(“Hank”)输出:// Hi! Thi...

  • 实现一个LazyMan

    实现一个 LazyMan,可以按照以下方式调用:LazyMan("Hank")输出:Hi! This is Han...

  • lazyman 实现

    function _lazyman(name) {this.tasks = [];var self = this;...

  • 实现lazyMan

    涉及的知识点: 流程控制:创建task任务队列,使用push、shift、unshift方法操作任务 闭包:当闭包...

  • LazyMan 自己的笨办法

    LazyMan 自己的笨办法 看了LazyMan,先用自己的笨办法写了个,只是为了实现功能,其他要求都没达到 本人...

  • LazyMan的深入解析和实现

    一、题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用:LazyMan(...

  • Lazyman的两种实现方式

    实现一个LazyMan, 可以按下列方式调用: 方式一: 方式二:

网友评论

      本文标题:实现lazyMan

      本文链接:https://www.haomeiwen.com/subject/fpglattx.html