Wie kann ich einen Standard-Getter und Setter mit ECMAScript 5 definieren?

8

Wie kann ich einen Standard-Getter für einen Prototyp angeben? Mit Standard-Getter meine ich eine Funktion, die aufgerufen wird, wenn obj.undefinedProperty123 aufgerufen wird.

Ich habe versucht, Object.prototype.get = function (property) {..}, aber dies wird in diesem Fall nicht aufgerufen.

    
Manuel 24.06.2010, 18:20
quelle

5 Antworten

4

Was Gareth sagte, außer dass es __noSuchMethod__ ist.

Oder haben Sie vielleicht an PHP gedacht?

Hier ist ein sehr guter Artikel über die kürzlich standardisierten Eigenschaften-Getter / Setter, die einige frühere Nicht-Standard-Inkarnationen hervorheben.

Ссылка

Zusammenfassung: Es gibt (noch) keinen standardmäßigen 'Catch-All' Getter / Setter, aber Object.defineProperty ist die Zukunft.

    
Dagg Nabbit 05.07.2010 06:29
quelle
4

In ECMAScript 5 können Sie get / set-Vorgänge nur für bestimmte benannte Eigenschaften (nicht allgemein für alle Eigenschaften) über Object.defineProperty :

%Vor%

Hier wird die Funktion get jeden Zeitcode ausführen, der versucht, someObj.someProp zu lesen.

Im kommenden ECMAScript 6-Entwurf wird dies über Proxies . Ein Proxy hat ein zugrunde liegendes Zielobjekt und setzt / erhält Funktionen. Immer wenn eine set- oder get-Operation auf einer der Eigenschaften eines Proxys ausgeführt wird, wird die entsprechende Funktion ausgeführt, wobei das Zielobjekt des Proxys, der verwendete Eigenschaftsname und der in set versuchte Wert als Argumente verwendet werden.

%Vor%

Hier wird die Einstellung zum Abrufen von Eigenschaftswerten auf prox dazu führen, dass die Funktionen set / get ausgeführt werden.

    
apsillers 29.09.2014 17:18
quelle
3

Sie müssen auf die Implementierung des "Proxy" -Systems von ECMA6 warten, das genau dafür ausgelegt ist. Siehe Ссылка .

    
user663031 18.12.2012 06:32
quelle
2

Firefox ist es mit Nicht-Standard-noSuchMethod möglich: -

%Vor%     
Gareth Heyes 24.06.2010 22:14
quelle
0

Ich bin mir nicht sicher, was Sie fragen. Wenn Sie möchten, dass eine Methode aufgerufen wird, wenn der Benutzer versucht, auf object.nonExistingProperty zuzugreifen. Ich glaube nicht, dass es irgendeinen Weg dafür gibt.

    
Neel Basu 24.06.2010 18:30
quelle