Angenommen, ich habe den folgenden Code (völlig nutzlos, ich weiß)
%Vor% Grundsätzlich wissen wir, dass apply ein Array als zweiten Parameter erwartet, aber wir wissen auch, dass arguments
kein richtiges Array ist. Der Code funktioniert wie erwartet, also kann ich sicher sagen, dass ich irgendein Array-ähnliches Objekt als zweiten Parameter in apply()
? Übergeben kann?
Das Folgende funktioniert auch (zumindest in Chrome):
%Vor% Update: Es scheint, dass mein zweiter Codeblock in IE & lt; 9 fehlschlägt, während der erste (blocking arguments
) funktioniert.
Der Fehler ist Array or arguments object expected
, also schließen wir, dass es immer sicher ist, arguments
zu übergeben, während es nicht sicher ist, ein Array-artiges Objekt in oldIE zu übergeben.
Annahme von ECMAScript 5.1: Ja. Gemäß ECMA-262, 10.6 hat das Argument-Objekt die Eigenschaften length
und index, die 15.3.4.3 ( Function.prototype.apply
) erfordert.
Nach Definition von Function.prototype.apply
in MDN:
fun.apply(thisArg[, argsArray])
Sie können auch
arguments
für den ParameterargsArray
verwenden .arguments
ist ein lokale Variable einer Funktion. Es kann für alle nicht spezifizierten verwendet werden Argumente des aufgerufenen Objekts. So müssen Sie das nicht wissen Argumente des aufgerufenen Objekts, wenn Sie die Methodeapply
verwenden. Sie können Verwenden Siearguments
, um alle Argumente an das aufgerufene Objekt zu übergeben. Das Das aufgerufene Objekt ist dann verantwortlich für die Behandlung der Argumente.
REF: Ссылка
Als zweites Argument akzeptiert apply
"ein arrayähnliches Objekt, das die Argumente angibt, mit denen die Funktion aufgerufen werden soll" . Nach meinem Verständnis sollte dieses Array-ähnliche Objekt die Eigenschaft length
für interne Iteration und numerisch definierte Eigenschaften (nullindiziert) haben, um auf die Werte zugreifen zu können.
Und das gleiche bestätigt meine Spezifikation : Ссылка , wie freundlicherweise von @ Spitze .
MDN kann nur für Mozilla-Implementierungen sprechen. Die tatsächliche Spezifikation , die alle Implementierungen erfüllen sollten, lautet wie folgt:
%Vor% Es scheint, dass die Eigenschaft length
und numerische Indexwerte die einzigen Voraussetzungen sind.
Tags und Links javascript