Können Sie Array.isArray () mit einem benutzerdefinierten Objekt vortäuschen?

8

Ich bin neugierig, ob es eine Möglichkeit gibt, Array.isArray() mit einem benutzerdefinierten Objekt zu fälschen.

Aus dem Buch JavaScript Patterns:

%Vor%

Dieses Objekt fällt eindeutig aus, aber gibt es einen anderen Weg, es zu tun? Das ist pure Neugier, und nicht, weil ich denke, dass Sie jemals mit .isArray() im normalen Client-Code schrauben könnten (obwohl es natürlich fantastisch wäre zu wissen, ob Sie könnten!).

    
Josh Smith 29.12.2011, 18:48
quelle

2 Antworten

9

Nur wenn Sie die interne Eigenschaft [[Class]] auf "Array" setzen, was nicht möglich ist so viel ich weiss. Aus der Spezifikation :

  

Die Funktion isArray nimmt ein Argument arg und gibt den booleschen Wert true zurück, wenn das Argument ein Objekt ist, dessen interne Eigenschaft der Klasse "Array" ist. Andernfalls wird false zurückgegeben.

Oder Sie gehen in die andere Richtung: Erstellen Sie ein normales Array und setzen Sie jede Array-Methode explizit auf undefined .

    
Felix Kling 29.12.2011, 18:54
quelle
10

Array.isArray = function () { return true; }

Und wenn du unartig sein willst

%Vor%     
Raynos 29.12.2011 19:07
quelle

Tags und Links