Я пытаюсь создать API-интерфейс fluent для проекта JavaScript.Как определить, является ли текучий метод последним, который будет называться
В настоящее время у меня есть что-то вроде этого:
function Foo(a, b) {
this.a = a;
this.b = b;
this.Set = function(attr, val) {
this[attr] = val;
return this;
},
this.refresh = function() {
//do something
}
};
Это позволяет мне написать следующее:
var foo = new Foo("Hello", "World");
// foo = { a : "Hello", b : "World" }
foo.Set("c", "!");
// foo = { a : "Hello", b : "World", c : "!" }
foo.Set(...);
//...
Преимуществом написания текучего API является вызовом метода гирлянды, поэтому я можно было бы легко и с готовностью писать foo.Set(...).Set(...).Set(...)
Написание базового API в порядке, но я хочу знать, как обнаружить последний вызов Set
в d aisy-chain, потому что в этом звонке я хотел бы позвонить refresh
.
Я хотел бы сделать это, чтобы пользователь не мог вручную добавить .refresh()
.
Кто-нибудь имел дело с чем-то подобным?
Спасибо, erip
EDIT
Желаемый эффект в псевдокоде:
function Foo(a, b) {
this.a = a;
this.b = b;
this.Set = function(attr, val) {
this[attr] = val;
//if this Set is the last
// return this.refresh();
return this;
},
this.refresh = function() {
//do something
}
};
Итак, в 'foo.Set(). Set(). Set()' вы хотите, чтобы первые два вызова 'Set' возвращали' this', но последний возвращал что-то другое? – Oriol
@Oriol если возможно, я бы хотел, чтобы последний 'Set' был' void', в основном. – erip
Вы не можете. И если вы можете найти какую-то взломать эту работу, это, наверное, плохая идея! – Evert