2017-03-20 5 views
0

Ich habe nur das Beispiel als Code gefunden, die fork() -Funktion kann das gleiche wie die Array.forEach() implementieren. Also, meine Frage ist: Warum muss die fun.call() übergeben werden und warum das letzte Argument ist this.call() Funktion in Javascript

Hoffnung Ihre freundliche Unterstützung,

if (!Array.prototype.fork) { 
 
    Array.prototype.fork = function(fun /*, thisp*/) { 
 
     var len = this.length; 
 
     //console.log(this); 
 
     if (typeof fun != "function") 
 
      throw new TypeError(); 
 

 
     var thisp = arguments[1]; 
 
     console.log(thisp); 
 
     for (var i = 0; i < len; i++) { 
 
      if (i in this) 
 
       fun.call(thisp, this[i], i, this); 
 
     } 
 
    }; 
 
} 
 
      
 
var keywords = ["sdfsdf", "dfhgfh", "Học lập trình", "thehalfheart"] 
 

 
keywords.fork(function(eachName, index) { 
 
    console.log(index + 1 + ". " + eachName); 
 
}, 'rich');

+1

Es ist vorbei 'this', aber der Code ist es nicht verwenden ... – epascarello

+1

Was ist' fork'? Wo hast du diesen Beispielcode gefunden? – Bergi

+0

@Bergi, ich referenziere von einer Seite, ich will nur den Mechanismus der Verwendung von Parameter 'element' und' index' in der Funktion 'Array.forEach (Funktion (Element, Index) {})' wissen. Ich denke, die Funktion 'fork()' ist die gleiche wie 'forEach()', also kann ich jetzt verstehen. – Joe

Antwort

1

Der erste Parameter .call() ist, was der Wert von this sein sollte innerhalb die aufgerufene Funktion zu erhalten. Der Parameter thisp scheint dort zu sein, falls Ihr Callback einen bestimmten Kontext (this value) benötigt, um ihn auszuführen - wie eine Methode innerhalb einer Klasse.

Was, warum this als letzte Parameter für call() übergeben wird, das ist so Ihr Rückruf, um die Original Array als Parameter zu erhalten. Wie Sie sehen, brauchen Sie nicht , um es in Ihrem Rückruf zu verwenden, aber Sie können.

thisArg = {a:1} 
[1,2,3].fork(function(value, index, origArray){ 
    // origArray will be [1,2,3] in each loop 
    // this will be `{a:1}`, because we passed it in as `thisArg` 
    // thisArg is optional and will be `null` if not passed 
}, thisArg); 

Als Referenz finden Sie in der Dokumentation für forEach: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

+1

Vielen Dank für Ihre Unterstützung, ich habe jetzt die Idee: das erste 'this' ist für den Kontext von' this 'im Fall der Verwendung von Callback-Funktion, die zweite 'this' ist nur in diesem Fall redundant. – Joe