美文网首页
关于链式调用的实例 JS

关于链式调用的实例 JS

作者: 章文顺 | 来源:发表于2019-10-20 10:18 被阅读0次

最近被问到这样一个问题,如下:
Man('hi').eat('fish').eat('rice').finishSleep(2000)
需求是:

  • 1、若没有调用finishSleep,则顺序打印 hi , fish , rice
  • 2、若调用finishSleep, 则顺序打印 2000, hi , fish , rice
    鄙人粗略实现如下(欢迎更牛逼的写法,请在下方留言讨论):
function Man(str) {
  Man.prototype.fnArr = []
  Man.prototype.fnArr.push(log(str))
  Man.prototype.exec()
  return Man;
}

function log(str) {
  return function () {
    console.log(str)
  }
}

Man.eat = function (str) {
  Man.prototype.fnArr.push(log(str))
  Man.prototype.exec()
  return Man;
}

Man.finishSleep = function(n) {
  Man.prototype.fnArr.unshift(log(n))
  Man.prototype.exec()
  return Man;
}

Man.prototype.exec = function () {
  clearTimeout(Man.prototype.st)
  Man.prototype.st = setTimeout(() => {
    for (const fn of this.fnArr) {
      fn()
    }
  }, 0);
}
Man('hi').eat('fish').eat('rice')
// log: hi , fish , rice
Man('hi').eat('fish').eat('rice').finishSleep(2000)
// log: 2000, hi , fish , rice

博客迁移新地址:点击前往

大前端知识库收集分享 www.190tech.site 壹玖零Tech
搜罗各种前后端奇淫技巧,花式编程思想,日日更新,速来围观吧...

相关文章

网友评论

      本文标题:关于链式调用的实例 JS

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