在我正在进行的传奇中,要了解有关面向对象的Javascript的更多信息 - 我遇到了一个关于创建一个类以响应以下API的问题:
var foo = new bar().delay(750).start().then(onComplete);
var bar = function() {
this.delay(function(per) {
//...
};
}
比我更有经验的人可以描述如何创建能够响应这一点的课程吗?我从未见过这样的链接,也无法在网上找到任何信息:(
答案 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)
的返回值上调用,该值仍然是同一个对象,依此类推......