天天看點

[07/9/28] 總結一下mootools的瑕疵吧 (持續更新)

這個文章我會慢慢總結一些不足,歡迎大家補充,并即時更正我的錯誤 :).

(這些不足如果在新版本裡已經修正,我會标出.svn上的版本我不做考慮)

1 each方法無法break.

例子: 找出一個數組中的第一個偶數.

var myarr=[1,2,3,15,5,21,22];

var rs=0;

myarr.each(function(val,idx){

if (val%2 ==0 ) {

rs=val;

return ; //return不是我想要的,我想在這裡友善快捷的結束each,咋辦?

}

});

目前我想到的是 使用 throw抛出一個異常,不知道各位還有更好的解決方案沒.

(當然修改moo源代碼可以得到更好的方案)

2 Element對象沒有setValue方法.

這個比較不能忍啊 呵呵,想設定頁面表單域的值都要自己想辦法,不了解為啥!

3 Json.Remote對象裡的hardcode.

見代碼裡的這句大家就明白了:

send: function(obj){

return this.parent(this.url, 'json=' + Json.toString(obj));

}

我想用這個方法,那服務端隻能接受名為json的json序列化字元串. 太不靈活了.

4 Json.Remote的send是否應該考慮支援發送多個json串呢?

5. Class 裡的一個bug

[code]

var Class = function(properties){

var klass = function(){

return (arguments[0] !== null && this.initialize && $type(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;

};

$extend(klass, this);

klass.prototype = properties;

klass.constructor = Class;

return klass;

};

[/code]

如果 我要傳的第一個參數就是null時 那麼整個類機制将失效

例如 一個類的構造方法有兩個參數 ,而他又有一個子類 子類也是如此

我在建立子類的時候,如果構造方法的第一個參數我就是要傳null,

那麼在子類裡調用父類的方法将失敗.

修改方法 将 null 換成其他的特殊值.

在新版本moo裡 用的是 moo定義的 $empty

arguments[0] !== $empty