Array.prototype._every = function (func, arr) {
var newArr = arr == undefined ? arr = this: arr;
if (arr.length == 0) return true;
if (typeof fn !== 'function') {
throw new TypeError(fn + ' is not a function');
}
for (let i = 0; i < newArr.length; i++) {
if (!func(newArr[i])) { //如果其中一個回傳false , ! 相反就變回true, 結果回傳false
return false;
}
}
return true;
};
function check(item) {
return item >= 10;
}
let arr = [32, 33, 16, 40];
let result = arr._every("check");
console.log(result); // true1) 瀏覽器不是有拋出錯誤的功能,加上這段有什麼用處呢
if (typeof fn !== 'function') {
throw new TypeError(fn + ' is not a function');
}
2) 為什麼我可以不用new Array() , 就可以呼叫_every 方法呢
uj5u.com熱心網友回復:
1. 主動拋出例外 2. _every是給陣列物件原型鏈上掛載一個方法 跟陣列其他方法一樣 Array new和字面量實體一樣的 難道不new一個陣列就不能push slice了uj5u.com熱心網友回復:
1.呼叫every需要傳入回呼函式,判斷是否為函式,不是的話,就主動拋出例外2.因為你給Array的原型加了方法,這是個參考,所有的實體物件,都有個__proto__屬性,指向原型
3.你這個方法,只允許回呼函式使用item,拿到每一項,但是缺少了index和arr,正常的陣列的這些方法,比如forEach、some、reduce都可以在回呼函式,拿到3個引數
uj5u.com熱心網友回復:
我打個比喻 function Person(){
}
Person.prototype._every = function(){
return 111;
};
alert(Person._every());Person._every() 如果事先不new Person 是列印不出來的, 就想知道為什麼Array 可以不new 也可以運行呢
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/21970.html
標籤:JavaScript
上一篇:js初學者 問一個?
