国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript Array數組對象的擴展函數代碼

2024-05-06 14:09:54
字體:
來源:轉載
供稿:網友
今天重點講下 如何給Array對象擴展

1、直接在Array.prototype 上擴展

2、用自己方法對數組對象進行擴展

直接在Array.prototype上擴展,不能直接對dom對象使用(如:document.getElementsByTagName('div')得到的nodeList);

對有潔癖的同學而言 也破了原始生態環境的 : )

先來看下 yui操作數組的一些方法,這里我對源碼簡單剝離并改動了下

代碼如下:
(function(){
var YArray;

YArray = function(o,idx,arraylike){
var t = (arraylike) ? 2 : YArray.test(o),
l, a, start = idx || 0;
if (t) {
try {
return Array.prototype.slice.call(o, start); //借助Array原生方法來把aguments轉換為JS數組
} catch(e) {
a = [];
l = o.length;
for (; start<l; start++) {
a.push(o[start]);
}
return a;
}
} else {
return [o];
}

}

YArray.test = function(o){
var r = 0;
if (o && (typeof o == 'object' ||typeof o == 'function')) {
if (Object.prototype.toString.call(o) === "[object Array]") {
r = 1;
} else {
try {
if (('length' in o) && !o.tagName && !o.alert && !o.apply) {
r = 2;
}
} catch(e) {}
}
}
return r;
}

YArray.each = (Array.prototype.forEach) ? //先檢測瀏覽器是否已支持,若有則調用原生
function (a, f, o) {
Array.prototype.forEach.call(a || [], f, o || Y);
return YArray;
} :
function (a, f, o) {
var l = (a && a.length) || 0, i;
for (i = 0; i < l; i=i+1) {
f.call(o || Y, a[i], i, a);
}
return YArray;
};

YArray.hash = function(k, v) {
var o = {}, l = k.length, vl = v && v.length, i;
for (i=0; i<l; i=i+1) {
if (k[i]) {
o[k[i]] = (vl && vl > i) ? v[i] : true;
}
}

return o;
};

YArray.indexOf = (Array.prototype.indexOf) ?
function(a, val) {
return Array.prototype.indexOf.call(a, val);
} :
function(a, val) {
for (var i=0; i<a.length; i=i+1) {
if (a[i] === val) {
return i;
}
}
return -1; //尋找不到的情況
};

YArray.numericSort = function(a, b) {
return (a - b); //從小到大排序, return (b - a); 從大到小
};


YArray.some = (Array.prototype.some) ?
function (a, f, o) {
return Array.prototype.some.call(a, f, o);
} :
function (a, f, o) {
var l = a.length, i;
for (i=0; i<l; i=i+1) {
if (f.call(o, a[i], i, a)) {
return true;
}
}
return false;
};

})();



借助Array原生方法來把aguments轉換為JS數組的其他方法 (Dom對象不可以,只有遍歷)
代碼如下:
Array.apply(null,arguments);
[].slice.call(arguments,0);
[].splice.call(arguments,0,arguments.length);
[].concat.apply([],arguments);
...


YArray函數不僅可以操作數組對象也對nodeList對象進行了操作
YArray(document.getElementsByTagName("div"));
遍歷dom對象 重新組裝成一個數組 : )
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 东乌珠穆沁旗| 临颍县| 内江市| 客服| 绥宁县| 米脂县| 柳林县| 丰原市| 屏东市| 平江县| 阳江市| 鹰潭市| 河北区| 德令哈市| 郯城县| 青神县| 德令哈市| 鱼台县| 雅安市| 丹凤县| 山丹县| 潼南县| 诸暨市| 门源| 电白县| 贺州市| 张家川| 锡林郭勒盟| 济源市| 通许县| 视频| 平顺县| 乌拉特后旗| 阿坝| 延寿县| 阿城市| 裕民县| 洛阳市| 蒙自县| 黑水县| 秦安县|