這涉及到一個問題,我問以前在這裏:How to implement chained method calls like jQuery?JavaScript的OOP語法和對象既是VAR和功能
我一直在使用的方法從某些時候有檢查答案,這效果很好。但我想進一步改變我的工具箱的語法。
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個syntaxs工作過相同foo對象,但缺乏OOP理解。我已經嘗試了幾件事情,到目前爲止,我可以獲得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
這真的不是OOP ...但靜音點。除非'bar'是一個函數,否則3和4是不兼容的。你可以做的最好的事情是讓它們不帶參數地調用'bar'。同樣用1和2. – 2012-02-03 19:42:55
沒錯。我已經有1和2個工作了,我已經有3和4個工作了。它讓所有的工作立即開始。我知道它可能是因爲jquery:$(arg).foo的作品,以及$ .browser例如。 – Fresheyeball 2012-02-03 19:49:07