链函数直接在Javascript中新创建的对象实例

时间:2013-01-16 09:16:57

标签: javascript

在我正在进行的传奇中,要了解有关面向对象的Javascript的更多信息 - 我遇到了一个关于创建一个类以响应以下API的问题:

var foo = new bar().delay(750).start().then(onComplete);

var bar = function() {
    this.delay(function(per) {
      //...
    };
}

比我更有经验的人可以描述如何创建能够响应这一点的课程吗?我从未见过这样的链接,也无法在网上找到任何信息:(

2 个答案:

答案 0 :(得分:4)

通过在函数中返回this来完成此链接:

this.delay = function(per) {
  //...
  return this;
};

如果你想坚持第一行代码,那么你的构造函数应该命名为bar:

var bar = function() {
    this.delay = function(per) {
      //...
      return this;
    };
    this.start = function() {
      ...
      return this;
    };
}

请参阅demonstration(打开控制台)

答案 1 :(得分:1)

方法链的秘诀在于从您希望能够链接的每个方法返回this。这允许下一个方法自动this.method()。你对bar对象的定义看起来就像这个shell:

function bar() {
    // bar initialization code here
}

bar.prototype = {
    delay: function(amt) {
        // delay code here
        return(this);
    },
    start: function() {
        // start code here
        return(this);
    },
    then: function(fn) {
        // then code here
        fn();
        return(this);
    }
};


var foo = new bar().delay(750).start().then(onComplete);

在您的示例中,执行new bar()并返回指向新bar对象的指针。 使用该新对象指针,在该对象上调用.delay(750)方法。然后该方法也返回对象,因此.start()方法在.delay(750)的返回值上调用,该值仍然是同一个对象,依此类推......