Setter für eine dynamische Eigenschaft in Javascript

8

Ich frage mich, ob es möglich ist, einen Setter für eine dynamische Eigenschaft in Javascript zu haben?

Also das:

%Vor%

Würde eine Funktion aufrufen, die 'a_custom_prop' und 'irgendwas' abrufen kann

Um klar zu sein, möchte ich eine Funktion ähnlich wie:

%Vor%

soll so heißen:

%Vor%

anstelle von:

%Vor%

Wissend, dass der Name der Eigenschaft nicht statisch relativ zu myobj ist, sonst hätte ich verwendet:

%Vor%     
Ervadac 30.04.2015, 10:18
quelle

4 Antworten

4

Was Sie wollen, ist ähnlich wie method missing in Ruby, wo Sie eine Funktion definieren, die Aufrufe von undefinierten Methoden behandelt.

Wie Sie hier lesen können: Hat Javascript sowas wie Rubys method_missing-Funktion? JavaScript hat noch nichts Ähnliches, aber es gibt einen Vorschlag für ES6: Ссылка

    
damluar 30.04.2015, 10:56
quelle
2

Wie Yoshi in einem Kommentar sagte, könnte es möglich sein, Object.observe() aus dem ES7-Entwurf.

Es ist jedoch nicht genau ein "Catch-All-Setter", weil es erst nach der geänderten Eigenschaft ausgelöst wird, nicht vorher. Wenn Sie zum Beispiel die Eigenschaft woanders speichern möchten, müssen Sie delete it. Da der observe Callback asynchron ist, wird er nach dem aktuellen Callstack ausgeführt, was bedeutet, dass der neue Wert sofort verwendet werden kann, bevor er geändert wird.

Auch Chrome nur für jetzt.

Das folgende Snippet macht einige Manipulationen am Objekt durch native Einstellung und mit Object.observe . Es meldet sich in der folgenden Reihenfolge an:

  1. Ich habe diesen Wert hinzugefügt: foobar
  2. Der Rückruf ruft ab: foobar
  3. Wert von foo.bar nach dem Löschen: undefined

Hier geht es:

%Vor%

Aufgrund der Tatsache, dass es im ES7-Entwurf enthalten ist, könnte das vorherige vollständig falsch sein, je nachdem, wann Sie dies lesen.

    
Paul Stenne 30.04.2015 11:15
quelle
0

Könnten Sie so etwas nicht verwenden?

%Vor%

BEARBEITEN:

Oder so etwas:

%Vor%

Beispiel Verwendung:

    
ElDoRado1239 30.04.2015 10:24
quelle
-1

Nein, das ist derzeit nicht möglich.

    
Barth Zalewski 30.04.2015 10:41
quelle

Tags und Links