Ist es möglich, jedes Mal, wenn ein Array erstellt wird, eine Funktion auszuführen?

8

Wenn ein Array erstellt wird, brauche ich eine Funktion, die automatisch für dieses Array aufgerufen wird. Ich dachte mir, dass das irgendwie mit dem Prototyp / Konstruktor des Arrays möglich wäre, aber ich weiß nicht, wie ich dieses Problem lösen soll.

Also habe ich ein Array, das ich initialisiere:

%Vor%

Nun sagen wir, ich habe eine Funktion wie folgt:

%Vor%

In diesem Fall würde das Aufrufen der Funktion für dieses Array den isObjectArray -Parameter false zuweisen.

Ich möchte jedoch, dass diese Funktion jedes Mal im Array ausgeführt wird, wenn ein Array erstellt wird, so dass standardmäßig für jedes Array die Eigenschaft isObjectArray festgelegt ist. Ist das möglich?

Vielen Dank im Voraus!

    
jonny 27.08.2015, 12:29
quelle

3 Antworten

5

Nach meinem Wissen ist es nicht möglich, aber Sie können eine Funktion definieren, die langsam berechnet, ob das Array nur Objekte enthält:

%Vor%

Der obige Code führt die Berechnung nur einmal durch (das erste Mal, wenn er angefordert wird) und bei nachfolgenden Aufrufen gibt er nur den bereits berechneten Wert zurück.

Auch wenn Sie Arrays erstellen, auf denen Sie isObjectArray() nicht aufrufen, wird die Berechnung nie durchgeführt.

    
GolfWolf 27.08.2015, 12:39
quelle
1

Nein. Dies war unter EcmaScript 3 durch das Überschreiben von Array möglich, aber dies führte zu einer Reihe von unangenehmen Sicherheitslücken wie z. B. Jeremiah Grossmans Kontaktlistenexfiltrationsattacke gegen Gmail , daher ist es unwahrscheinlich, dass ähnliche Funktionen eingeführt werden.

Wenn ein Angreifer einen Benutzer dazu bringen kann, eine Seite zu besuchen, kann er Folgendes tun:

%Vor%     
Mike Samuel 27.08.2015 15:11
quelle
0

Obwohl @ w0lf meine Frage schon sehr gut beantwortet hat, hat @MatteoTassinari eine Menge Upvotes für diesen Kommentar bekommen:

  

Erstelle einfach eine "Factory" -Funktion, die ein Array als Parameter akzeptiert und dann alles macht, was du willst.

Also dachte ich, ich würde mir Fabriken ansehen und meine Frage mit einem beantworten, für jeden, der sich die Frage ansieht, wer vielleicht genauso interessiert ist wie in den Fabriken. Folgendes habe ich mir ausgedacht:

%Vor%

Im Grunde genommen ist eine "factory" -Funktion eine Funktion, die nur ein neues Objekt zurückgibt - in meinem Fall das Array, das ich in der Fabrik mutiere, indem ich die Variable isObjectArray hinzufüge. Einfach!

    
jonny 27.08.2015 14:29
quelle

Tags und Links