日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转帖]Mootools源码分析-02 -- Utils

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转帖]Mootools源码分析-02 -- Utils 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原帖地址:http://space.flash8.net/space/?uid-18713-action-viewspace-itemid-400118

原作者:我佛山人

?

?

//檢查對象是否已經定義或者已經賦值
function?$chk(obj)????{
????
return?!!(obj?||?ōbj?===?0);
};

//通用清除計時器的方法,即能清setTimeout,又能清setInterval,即使計時器不存在也不會報錯
function?$clear(timer)????{
????clearTimeout(timer);
????clearInterval(timer);
????
return?null;
};

/*
檢查對象屬性是否已初始化/定義,注意只能檢查對象的屬性,不能直接檢查變量
因為未定義變量在調用本方法前便會拋出錯誤,切記
*/
function?$defined(obj)????{
????
return?(obj?!=?undefined);
};

//一個空的函數,主要用于事件的初始化
function?$empty()????{};

//閉包應用,延后取指定的參數值
function?$arguments(i)????{
????
return?function()????{
????????
return?arguments[i];
????};
};

//lambda(匿名)函數,將指定變量函數化,保證返回一個function對象,類似$splat,將變量數組化
function?$lambda(value)????{
????
return?(typeof?value?==?'function')???value?:?function()????{
????????
return?value;
????};
};

//淺拷貝擴展,不考慮object型屬性的,只是簡單的覆蓋
function?$extend(original,?extended)????{
????
for?(var?key?in?(extended?||?{}))????original[key]?=?extended[key];
????
return?original;
};

//解鏈對象,主要是解決object類型的變量賦值時會影響原值的問題,所以修改其實我覺得叫clone的話更明了
function?$unlink(object)????{
????
var?unlinked?=?null;

????
switch?($type(object))????{
????
case?'object':
????????unlinked?
=?{};

????????
//深拷貝
????????for?(var?p?in?object)????unlinked[p]?=?$unlink(object[p]);
????????
break;
????
case?'hash':

????????
//深拷貝
????????unlinked?=?$unlink(object.getClean());
????????
break;
????
case?'array':
????????unlinked?
=?[];

????????
//深拷貝
????????for?(var?i?=?0,?l?=?object.length;?i?<?l;?i++)????unlinked[i]?=?$unlink(object[i]);
????????
break;
????
default:
????????
return?object;
????}

????
return?unlinked;
};

//合并所有對象,參數位置越后優先級越高,就是說后面的參數對象屬性會覆蓋前面的,注意用到了$unlink
function?$merge()????{
????
var?mix?=?{};
????
for?(var?i?=?0,?l?=?arguments.length;?i?<?l;?i++)????{
????????
var?ōbject?=?arguments[i];
????????
if?($type(object)?!=?'object')?continue;
????????
for?(var?key?in?object)????{
????????????
var?ōp?=?object[key],?mp?=?mix[key];
????????????mix[key]?
=?(mp?&&?$type(op)?==?'object'?&&?$type(mp)?==?'object')???$merge(mp,?op)?:?$unlink(op);
????????}
????}
????
return?mix;
};

//返回參數列表中從左到右第一個已定義的表達式的值
function?$pick()????{
????
for?(var?i?=?0,?l?=?arguments.length;?i?<?l;?i++)????{
????????
if?($defined(arguments[i]))????return?arguments[i];
????}
????
return?null;
};

//在min到max之間取一個隨機數
function?$random(min,?max)????{
????
return?Math.floor(Math.random()?*?(max?-?min?+?1)?+?min);
};

//變量數組化,通常用于保證之后的代碼能執行數組的each方法
function?$splat(obj)????{
????
var?type?=?$type(obj);
????
return?(type)???((type?!=?'array'?&&?type?!=?'arguments')???[obj]?:?obj)?:?[];
};

//當前的時間截,Fx中的時間周期判斷使用較多
var?$time?=?Date.now?||?function()????{
????
return?new?Date().getTime();
};

//依次嘗試執行參數列表中的函數,與Prototype的Try.these異工同曲之妙,只是更簡練
function?$try()????{
????
for?(var?i?=?0,?l?=?arguments.length;?i?<?l;?i++)????{
????????
try?{
????????????
return?arguments[i]();
????????}?
catch(e)????{}
????}
????
return?null;
};

//判斷對象類型,JS中很多類型typeof都是object,無法精確判斷,但是因為有Native的實現,使精確判斷類型成為了可能
function?$type(obj)????{
????
if?(obj?==?undefined)????return?false;

????
//此行代碼的實現有賴于Native的創意
????if?(obj.$family)
????????
return?(obj.$family.name?==?'number'?&&?!isFinite(obj))???false?:?obj.$family.name;
????
if?(obj.nodeName)????{
????????
switch?(obj.nodeType)????{
????????
case?1:?return?'element';
????????
case?3:?return?(/\S/).test(obj.nodeValue)???'textnode'?:?'whitespace';
????????}
????}?
else?if?(typeof?obj.length?==?'number')????{
????????
if?(obj.callee)?return?'arguments';
????????
else?if?(obj.item)?return?'collection';
????}
????
return?typeof?obj;
};

?

轉載于:https://www.cnblogs.com/maapaa/articles/mootools-s-2.html

總結

以上是生活随笔為你收集整理的[转帖]Mootools源码分析-02 -- Utils的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。