- 主题:[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