仅将forEach遍历作为函数进行封装
var arr = [1, 6, 9, 8];
function myForEach(array, cb) {
for (var i = 0; i < array.length; i++) {
cb(array[i], i, array);
}
}
myForEach(arr, function(value, index, array) {
console.log(value);
console.log(index);
console.log(array);
})
为了更加深刻理解回调函数,将上诉代码进行更加细化
var arr = [1, 6, 9, 8];
function myForEach(array, cb) {
for (var i = 0; i < array.length; i++) {
cb(array[i], i, array);
}
}
function callback(value, index, array) {
console.log(value);
console.log(index);
console.log(array);
}
myForEach(arr, callback);
将forEach作为方法添加到原型中去
- 将方法添加到原型中,可以更好的理解到
this
的指向- 只要添加在原型上的东西,那么里面所有对实例化对象操作的内容全部bout改为
this
Array.prototype.myForEach = function(cb, thisArg) { //cb为回调函数,thisArg为强制改变指针的地址
for (var i = 0; i < this.length; i++) { //this操作的是实例化对象arr——点在谁身上指向谁
cb.call(thisArg, this[i], i, this); //使用call函数强制改变回调函数里this的指向
}
}
var arr = new Array("33", "55", 99); //构造实例化对象
arr.myForEach(function(value) { //直接从Array.prototype里直接继承添加的方法
console.log(value);
console.log(this);
}, [999])