在《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...