Это связано с вопросом, который я задал ранее здесь: Как реализовать цепочечные вызовы методов, такие как jQuery?
Я уже некоторое время использую метод из контрольного ответа, и он работает хорошо. Но я бы хотел еще больше изменить синтаксис моего инструментария.
foo(firstarg).bar(secondarg); // should function as the question above.
foo(onlyarg).bar // a function with one argument
foo.bar(onlyarg); // should also work, when a first argument is not appropriate.
foo.bar; // a function without an argument, or returns a static value.
Мне бы хотелось, чтобы все 4 синтаксиса работали с одним и тем же объектом foo, но для этого не хватает понимания ООП. Я попробовал несколько вещей, и до сих пор я могу заставить 1 и 2 работать, а 3 и 4 - работать, но не для всех вместе. Также было бы хорошо, если бы цепочка оставалась опцией, если бы каждая функция возвращала корневой объект.
Редактировать: мне явно нужно быть более конкретным, вот что у меня сейчас:
var main = function(obj){ this.obj = obj; };
var tool = function(obj){ return new main(obj); };
main.prototype = {
alertThisPlus : function(plus){
alert(this.obj + ' ' + plus);
},
alertJustThis : function(){
return alert(this.obj);
}
};
использование
tool('hello').alertThisPlus('world'); // returns alert('hello world')
tool().alertJustThis('hello world'); // returns alert('hello world');
я хотел бы сделать это:
tool('hello').alertThisPlus('world'); // returns alert('hello world') no change
tool.alertJustThis('hello world'); // returns alert('hello world') does not work