window._ = {
VARSION:"0.1.0",
each:function(obj,iterator,context){
var index = 0;
try{
if(obj.forEach){
obj.forEach(iterator,context);
}else if(obj.length){
for( var i= 0; i<obj.length; i++){
iterator.call(context,obj[i],i);
}
}else if(obj.each){
obj.each(function(value){
iterator.call(context,value,index++)
});
}else{
var i = 0;
for(var key in obj){
var value = obj[key],
pair = [key,value];
pair.key = key;
pair.value = value;
iterator.call(context,pair,i++);
}
}
}catch(e){
console.log(e)
// if(e != "__break__") throw e;
}
return obj;
}
}
var arr = {
a:5,
b:6,
c:4
}
_.each(arr,function(a,b){
console.log(a)
console.log(b)
})
網速原因 不能上傳img 抱歉
我想知道 那個call的作用具體在這段程式碼的意思是怎麼樣的
執行的流程是什麼樣的 謝謝各位
call
是为了给你保证你提供了第三个参数的时候callback
的作用域不受污染.程式碼的執行順序可以 debug 一下
iterator.call(context.....
相當於給iterator函數this綁定為context
iterator.call()
中,iterator
是傳入的遍歷函數,具體到本例中,就是指匿名函數:因此,call 指的是
Function.prototype.call
。詳見Function.prototype.call() - JavaScript | MDNFunction.prototype.call
的簽名格式是:thisArg 用來改變函數內部
this
指標的綁定。用於指定函數的執行環境
call讓指定函數的this指向對應的物件。
上面的範例:
iterator.call(context,obj[i],i)//this指向context,obj[i],i為參數
建議看下,方便理解上面的程式碼http://www.liaoxuefeng.com/wi...