ES6-Proxy vom ES6-Klassenkonstruktor zurückgeben

8

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?

    
Uday Hiwarale 04.12.2016, 18:00
quelle

2 Antworten

6

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.

  

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.

%Vor%

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

    
hallaji 26.07.2017 04:07
quelle
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.

    
Joshua Skrzypek 16.02.2017 21:03
quelle