2017-12-10 12 views
0

以下のコードを実行してください。 calllback.callがやっていることはまったくできません。jqueryでcallback.call関数を理解する

また、私はthisとthis [i]の違い、if(callback.call(this、this [i]))がtrueまたはfalseに評価される方法を知ることができません。

Array.prototype.each = function(callback) { 
    var i = 0; 
    while (i < this.length) { 
    callback.call(this, this[i]); 
    i++; 
    } 
    return this; 
}; 

Array.prototype.map = function(callback) { 
var i = this.length; 
var found = [] 
while (i--) { 
    if(callback.call(this, this[i])) { 
    found.push(this[i]); 
    } 
} 
return found; 
}; 

の機能は以下のと呼ばれています。

Array.each(function(value){ 
... 
}) 

Array.map(function(value){ 
... 
}) 
+0

どちらの場合でも、 'each'と' map'には関数が割り当てられます。 – CodingYoshi

+0

'[1,2,3] .each(function(){/ * do something * /})'のような関数を呼び出さないでしょうか? –

答えて

0

私がやっているcalllback.callだと正確に何ができないのです。

Function.prototype.callあなたはthis

callback.call(this, this[i]); 

のための明示的な値を持つ関数を呼び出すことができますコールバック内thisの値がに設定されていることを除いて

callback(this[i]) 

と同じです現在の状況と同じです。


また、[i]はこれとこれとの違いが何であるかを知ることができないのです。

この文脈では、thisが現在の配列です。したがって、thisは配列全体を意味し、this[i]は配列のi番目の要素を取得します。あなたは、配列を意志ループを持ち、それらのそれぞれの関数を呼び出す


.each機能。これはArray.prototype.forEachに組み込まれているjavascriptに似ています。

.mapは、Array.protoype.mapのポリフィルであるように名前が付けられていますが、実際には.filter操作を行っています。奇妙な。

+0

if(callback.call(this、this [i]))がtrueまたはfalseに評価される方法を知ることができます –

+0

あなたはコールバックとしてどのような関数を渡していますか?その関数は何を返すのでしょうか? –