javascript - 延迟到方法链中的下一个函数

标签 javascript delay method-chaining

我想了解更多关于 Javascript 中的方法链的知识,并且想知道在没有 jQuery 的情况下创建延迟到链中下一个函数的正确方法:

var foo = function() {
    this.delay = function(per) {
        setTimeout(start, per);
        return this;
    };
    this.start = function() {
        alert('start!');
    };
};

var bar = new foo().delay(1000).start();

最佳答案

这并不容易做到。 jQuery 使用 specific queue system .

假设您想在没有 jQuery 的情况下执行此操作,则必须自己实现一个队列。

例如这个非常简单的实现:

var foo = function() {
    var queue = [];
    var timer;
    this.delay = function(per) {
      timer = setTimeout(function(){
        timer = 0;
        var f;
        while (f = queue.shift()) f();
      }, per);
      return this;
    };
    this.addFunction = function(f) {
      if (timer) queue.push(f);
      else f();
      return this;
    };
    this.start = function() {
       this.addFunction(function(){alert('start')});
       return this;
    };
};

Demonstration


如果你想链接另一个未在 foo 中定义的函数,你可以这样做

var bar = new foo().delay(3000).start()
    .addFunction(function(){alert("another chained one")});

Demonstration

关于javascript - 延迟到方法链中的下一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365318/

相关文章:

javascript - Typescript - 如何声明以@开头的属性名称?

javascript - (游戏编程)如何在攻击之间添加延迟?

Java StringBuilder 追加方法链

c# - 如何在 C# 中创建 Fluent Interface 并对某些方法有一些限制?

javascript - 将值附加到 JQuery 中的输入字段

javascript - 使用 jQuery 或纯 JavaScript 提交对 Instagram 帖子的评论

windows - Windows如何使用Xming处理剪贴板界面?

android - 处理程序/可运行延迟有时会产生不同步的事件

c++ - operator-> "chained"是指针吗?

javascript - 我可以将字符串分配给 JavaScript 对象变量吗?