Ich möchte, dass der Benutzer nur bestimmte Eigenschaften für ein Objekt festlegt, aber zu der gleichen Zeit, zu der das Objekt aus der benutzerdefinierten Klasse erstellt werden sollte.
Zum Beispiel
%Vor% row
kann Methoden haben. Wenn der Benutzer versucht, row.password
festzulegen, sind sie nicht zulässig.
Eine Möglichkeit ist, new Proxy
anstelle von new Row
zu verwenden, aber dann werden wir alle coolen Dinge, die wir machen, in Row
klasse verlieren. Ich möchte, dass new Row
ein Proxy-Objekt mit this
reference als Proxy-Ziel zurückgibt.
Hat jemand Ideen dazu? Wenn du mongoose
kennst, wie macht mongoose
es?
Wenn der Proxy-Vorgang für Sie sicher ist, können Sie die Set-Funktionalität einschränken, indem Sie eine ES6-Proxy-Instanz zurückgeben.
Standardmäßig gibt der Konstruktor in JavaScript this
object automatisch zurück, aber Sie könnten ein benutzerdefiniertes Verhalten definieren und zurückgeben, indem Sie einen Proxy auf this
als Ziel instanziieren. Beachten Sie, dass die set-Methode in Proxy einen booleschen Wert zurückgeben sollte.
%Vor%MDN : Die set-Methode sollte zurückkehren ein boolescher Wert Geben Sie true zurück, um anzugeben diese Zuordnung war erfolgreich. Wenn die set-Methode false zurückgibt und Zuweisung im Strict-Mode-Code passiert, wird ein TypeError geworfen.
Nun dürfen Sie die nicht einstellbaren Eigenschaften nicht mehr entsprechend dem Proxy festlegen.
%Vor%Es ist auch möglich, benutzerdefiniertes Verhalten bei der get-Methode zu haben.
Hinweis: Laut MDN im Moment ist die Browser-Kompatibilität für handler.set()
noch nicht offensichtlich. Aber es funktioniert für mich auf Node v8.1.3
Sie können dies tun, ohne Proxies zu verwenden.
In Ihrem Klassenkonstruktor können Sie die Passwort-Eigenschaft wie folgt definieren:
%Vor% Sie finden weitere Informationen dazu, wie Sie dies in des MDN verwenden können Object.defineProperty()
Seite.
Tags und Links javascript proxy es6-class es6-proxy