在《JavaScript权威指南》上有一段用来实现Array.prototype.map
的函数:
var map = function(a,f){
var results = [];
for(var i = 0,l = a.length; i<l; i++){
if(i in a){
results[i] = f.call(null,a[i],i,a);//这里
}
}
return results;
};
为什么要用call(null)
而不是直接使用f(a[i], i, a)
? 这样this都是指向全局啊
你可以看到,在这里实现的map是这种形式的, 即 map(array, f),也就是只能用两个参数来调用,
我们再看一下MDN上给出的函数原型,
callback也就是我们所说的f,那么最后一个this是可选的,而书上提供的函数根本就没有考虑这个值,那么当不传这个值的时候,如果省略了 thisArg 参数,或者赋值为 null 或 undefined,则 this 指向全局对象 。
此外,我们已知在使用函数对象call方法时,
总之,一句话为了完全模拟map函数的性质~
/q/10...