Native Proxy Syntax
# Matthew Robb (7 years ago)
I feel like this would be easier handled as a subclass helper:
f
unction asProxy(traps={}, Class=function asProxy(){}) {
return class extends Class {
constructor() {
super(...arguments);
return new Proxy(this, traps);
}
}
}
class MyClass extends asProxy({ ... }) { ... }
class MyOtherClass extends asProxy({ ... }, MyClass) { ... }
- Matthew Robb
# Alex Kodat (7 years ago)
It would seem that a more general solution would be to allow let inside a class definition and have the constructor close over the variables declared in the class:
class MyClass { let get = (target, name) => { if (name in target) return target[name]; // ... do something to determine property } constructor() { return new Proxy(this, {get}); } }
While this does require an extra return statement it's reasonably tidy and
has the huge benefit of providing private variables in a class (as local
variables in a closure). But I have to believe that this has been discussed
ad nauseum and there's probably a very good reason let (or some equivalent)
was not part of class.
# Rick Waldron (7 years ago)
Inline...
On Wed, Aug 23, 2017 at 11:08 AM Vihan Bhargava <contact at vihan.org> wrote:
The
Proxy
class is great for classes however at the moment, the current syntax can be unwieldy:class MyClass { constructor() { return new Proxy(this, { get: function(target, name) { if (name in target) return target[name]; // ... do something to determine property } }); } }
My proposal is to introduce a more idiomatic syntax for proxies in classes:
class MyClass { constructor () { ... } get *(name) { // ... do something to determine property } }
This looks too much like GeneratorMethod syntax:
class Foo {
constructor() {}
* gen() {}
}
The
Proxy
class is great for classes however at the moment, the current syntax can be unwieldy:My proposal is to introduce a more idiomatic syntax for proxies in classes:
This already is much more clear than the above.