国产探花免费观看_亚洲丰满少妇自慰呻吟_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對象 重新組裝成一個數組 : )
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 海原县| 广南县| 甘南县| 平乡县| 乌恰县| 石阡县| 封丘县| 舒城县| 民县| 治多县| 昆山市| 曲水县| 富裕县| 海口市| 镇沅| 普洱| 东乡族自治县| 长兴县| 清河县| 邯郸市| 西和县| 乐都县| 九龙坡区| 宜宾市| 汤阴县| 浦北县| 前郭尔| 张家界市| 满洲里市| 沧源| 巴林右旗| 晋宁县| 涞源县| 仁怀市| 汝州市| 巴林右旗| 凤凰县| 扶余县| 房产| 上杭县| 印江|