Ist es sicher, Argumente an apply () zu übergeben?

8

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.

    
David Fregoli 14.05.2013, 12:51
quelle

3 Antworten

3

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.

    
Matthias Benkard 14.05.2013, 13:01
quelle
7

Nach Definition von Function.prototype.apply in MDN:

  

fun.apply(thisArg[, argsArray])

     

Sie können auch arguments für den Parameter argsArray 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 Methode apply verwenden. Sie können   Verwenden Sie arguments , 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 .

    
VisioN 14.05.2013 12:56
quelle
1

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.

    
HBP 14.05.2013 13:08
quelle

Tags und Links