1

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

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

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

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

4

2 回答 2

4

这个链接是通过返回this你的函数来完成的:

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

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

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

演示(打开控制台)

于 2013-01-16T09:18:28.107 回答
1

this方法链接的秘诀是从您希望能够链接的每个方法返回。这允许下一个方法this.method()自动进行。您对 bar 对象的定义类似于以下外壳:

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)仍然是同一个对象,依此类推......

于 2013-01-16T09:22:48.817 回答