- 主题:[js] 静态方法链
-         这个写法和chain.sub().add()……相比好处在什么地方?
 你为什么prefer这种写法?
 想不明白啊
 
 当然,我对func program还没有入门……
 【 在 withinsea (沐海~魔導奏器|歌の琴フォルテール) 的大作中提到: 】
 : 你這完全只是不喜歡方法鏈嘛
 : 而且誰說不能調試的……
 : 這個丟給 firebug,斷得很好
 : ...................
 --
 修改:roy FROM 211.151.91.*
 FROM 211.151.91.*
 
- 【 在 roy (天上掉大饼:知行合一) 的大作中提到: 】
 :         这个写法和chain.sub().add()……相比好处在什么地方?
 :         你为什么prefer这种写法?
 不是 prefer,而是不得不這麽寫……
 首先一點,我寫這個是爲了用 foo(obj, args..) 這種靜態方法
 挂到 obj 類底下寫成 obj.foo(args) 的不算數;
 那麽如果我想寫 $chain(obj).foo().bar().... 這樣的話
 就必須把所有可能用到的方法挂給 $chain(obj)
 但是,既然我無法遍歷臨時變量,那麽這個就是做不到的
 所以沒辦法的情況下把 foo,bar 之類都作爲參數傳進去了
 :         想不明白啊
 : ...................
 --
 修改:withinsea FROM 221.221.150.101
 FROM 221.221.150.101
 
- 【 在 withinsea (沐海~魔導奏器|歌の琴フォルテール) 的大作中提到: 】
 : 不是 prefer,而是不得不這麽寫……
 : 首先一點,我寫這個是爲了用 foo(obj, args..) 這種靜態方法
 : 挂到 obj 類底下寫成 obj.foo(args) 的不算數;
 为啥非要用静态方法
 obj.foo效率差很多吗?
 : ...................
 --
 修改:roy FROM 211.151.91.*
 FROM 211.151.91.*
 
- 效率上並不會有什麽區別
 我比較喜歡 foo(obj,args) 的原因是爲了讓工具方法能夠獨立出來
 
 擧個典型的例子來講,比如在數組裏面查找一個對象的方法
 像 prototype.js 這樣的框架就會實現成這樣:
 
 Array.prototype.find = function (obj) { ...; return idx; };
 
 這樣一來所有數組的成員方法就都變了,因爲它修改了 Array 原型
 其結果就是如果我同時使用另一個在 Array 原型上作修改的框架
 兩者就很可能發生衝突
 
 另一種實現方法就是寫成比如:
 
 ArrayUtil.find = function (arr, obj) { ...; return idx; };
 
 這種只要 ArrayUtil 這個包對象不重名,各個工具包之間是不會衝突的
 
 而 $chain 的目的就是讓這種形式的工具方法能夠形成方法鏈
 
 【 在 roy (天上掉大饼:知行合一) 的大作中提到: 】
 :         为啥非要用静态方法
 :         obj.foo效率差很多吗?
 --
 修改:withinsea FROM 221.221.150.101
 FROM 221.221.150.101
 
- 测试了一下,好像直接函数call比成员函数call要慢
 代码如下:
 <script type="text/javascript">
 var obj1={ a:"",b:""};
 function foo(obj,arg) {
 var str="";
 obj.a=arg;
 }
 
 var obj2= {
 a : "",
 b : "",
 foo: function (arg) {
 this.a=arg;
 }
 }
 
 var TIMES=100000;
 var start=new Date();
 for ( i =1;i<TIMES;i++ ) {
 foo(obj1,i);
 }
 var end=new Date();
 console.log("Time of function call %d",end.getTime()-start.getTime());
 var TIMES=100000;
 var start=new Date();
 for ( i =1;i<TIMES;i++ ) {
 obj2.foo(i);
 }
 var end=new Date();
 console.log("Time of member function call %d",end.getTime()-start.getTime());
 
 </script>
 我这里的运行结果是:
 Time of function call 1419
 Time of member function call 1320
 当然,相差不是很大:P
 
 【 在 withinsea (沐海~魔導奏器|歌の琴フォルテール) 的大作中提到: 】
 : 效率上並不會有什麽區別
 : 我比較喜歡 foo(obj,args) 的原因是爲了讓工具方法能夠獨立出來
 : 擧個典型的例子來講,比如在數組裏面查找一個對象的方法
 : ...................
 --
 修改:roy FROM 211.151.91.*
 FROM 211.151.91.*
 
-         恩,不混用框架就好了嘛
 或者直接用框架提供的扩展机制,比如mootools的object.extend……
 【 在 withinsea (沐海~魔導奏器|歌の琴フォルテール) 的大作中提到: 】
 : 效率上並不會有什麽區別
 : 我比較喜歡 foo(obj,args) 的原因是爲了讓工具方法能夠獨立出來
 : 擧個典型的例子來講,比如在數組裏面查找一個對象的方法
 : ...................
 --
 FROM 211.151.91.*
 
- 【 在 roy (天上掉大饼:知行合一) 的大作中提到: 】
 : 测试了一下,好像直接函数call比成员函数call要慢
 嗯,確實。不過好象影響不大……
 : 代码如下:
 : <script type="text/javascript">
 : ...................
 --
 FROM 221.221.150.101
 
- 不少框架還是很適合混用的嘛。比如 jquery+Ext
 好像 dojo 也可以混起來用
 
 【 在 roy (天上掉大饼:知行合一) 的大作中提到: 】
 :         恩,不混用框架就好了嘛
 :         或者直接用框架提供的扩展机制,比如mootools的object.extend……
 這樣的話用過之後還要記得刪
 否則啥時候哪裏再來個 for(var-in) 的話又要出問題啦。
 hasOwnProperty 也不是哪裏都適用的
 --
 修改:withinsea FROM 221.221.150.101
 FROM 221.221.150.101
 
- 你说的对,我完全只是不喜欢而已。
 firebug这么聪明,我很欣慰。
 
 【 在 withinsea (沐海~魔導奏器|歌の琴フォルテール) 的大作中提到: 】
 : 你這完全只是不喜歡方法鏈嘛
 : 而且誰說不能調試的……
 : 這個丟給 firebug,斷得很好
 : ...................
 --
 FROM 222.76.228.*
 
- 恩,都用的自己的命名空间,不去污染原始的Object。。
 
 肯定可以混用的。。
 【 在 withinsea (沐海~魔導奏器|歌の琴フォルテール) 的大作中提到: 】
 : 不少框架還是很適合混用的嘛。比如 jquery+Ext
 : 好像 dojo 也可以混起來用
 :           這樣的話用過之後還要記得刪
 : ...................
 --
 FROM 202.108.12.36