Eintauchen in das Innenleben von Array.prototype.slice.call(arguments)
Verstehen des Verhaltens von Array.prototype.slice. call(arguments) erfordert eine eingehende Untersuchung, die über die oberflächliche Verwendung der Konvertierung von Argumenten in ein echtes Array hinausgeht.
Wenn Slice() normalerweise direkt für ein Array aufgerufen wird, iteriert es durch die Elemente dieses Arrays Array. Die Verwendung von .call() und .apply() bietet jedoch eine einzigartige Möglichkeit, den Wert davon innerhalb einer Funktion manuell zu definieren.
Im Fall von Array.prototype.slice.call(arguments) ein Array -ähnliches Objekt mit numerischen .length- und indizierten Eigenschaften wird durch dieses ersetzt. Diese Ersetzung täuscht Slice() vor und geht davon aus, dass es sich um ein echtes Array handelt, was seinen normalen Betrieb erleichtert.
Betrachten Sie das folgende Beispiel, in dem ein einfaches Objekt ohne inhärente Array-Eigenschaften mit .call() so festgelegt wird:
var my_object = { '0': 'zero', '1': 'one', '2': 'two', '3': 'three', '4': 'four', length: 5 }; var sliced = Array.prototype.slice.call( my_object, 3 );
Bemerkenswerterweise verhält sich Slice() wie erwartet und liefert das gewünschte Ergebnis:
['three','four'];
Der gleiche Mechanismus gilt, wenn ein Argumentobjekt als Wert dafür im Array übergeben wird. Prototyp.slice.call(Argumente). Da Argumente über eine .length-Eigenschaft und ein Array numerischer Indizes verfügen, verfährt Slice() so, als würde es mit einem realen Array operieren, und liefert so ein konsistentes und vorhersehbares Ergebnis.
Das obige ist der detaillierte Inhalt vonWie wandelt Array.prototype.slice.call(arguments) Argumente in ein Array um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!