2016-07-08 3 views
1

Ich kenne die Basis von Aufruf und array.prototype.map.call() -Funktion nimmt zwei Argumente, der erste ist der Objekt Kontext, der als dies innerhalb der aufgerufenen verwendet werden soll Funktion und zweite ist Argument Liste. Aber in MDN fand ich ein Beispiel, wo array.prototype.map über Call-Methode verwendet wird und eine Zeichenfolge als erstes Argument übergeben wird.Verwenden Sie array.prototype.map über Anruf auf einem Stirng

Ich möchte wissen, wie übergebene Zeichenfolge innerhalb der Map-Funktion manipuliert wird.Nein dieses Schlüsselwort in der Kartenfunktion.Wie Karte weiß, dass es auf einem stirng aufgerufen wird?

var map = Array.prototype.map; 
var a = map.call('Hello World', function(x) { return x.charCodeAt(0); }); 
+1

* "Nein dieses Schlüsselwort innerhalb der Kartenfunktion." * - Ich denke, Sie verwirren die '.map()' Funktion selbst mit der Funktion, die Sie übergeben als ein Argument für '.map()'. – nnnnnn

+0

Wenn Sie durch das 'polyfill' von' Array # map' gehen, werden Sie erfahren, dass es sich um 'while' loop handelt, wobei' length' von 'this' betrachtet wird und in diesem Fall' this' ist ein 'String 'was hat 'length'-Eigenschaft ... – Rayon

+0

Warum glaubst du, dass die' map'-Funktion ihr' this'-Argument nicht benutzt hat? – Bergi

Antwort

4

Die Zeichenfolge wird intern im folgenden Format dargestellt:

String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "w", 7: "o", 8: "r", 9: "l", 10: "d", length: 11, [[PrimitiveValue]]: "hello world"} 

Also, wenn diese dies abzubilden geben wird tatsächlich als Array behandelt, da es Indizes als Schlüssel und eine length Eigenschaft hat. Array.prototype.map iteriert darüber, um das Array zurückzugeben, das in der Zeichenfolge aufgerufen wurde, die Sie mit der Methode Function.prototype.call übergeben haben.

Versuchen Sie new String('hello world') in der Konsole.

Verwandte Themen