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:
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: Ссылка
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:
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.
Könnten Sie so etwas nicht verwenden?
%Vor%BEARBEITEN:
Oder so etwas:
%Vor%Beispiel Verwendung:
Tags und Links javascript