Re: EcmaScript Proposal – Private methods and fields proposals.
Sultan
thysultan at gmail.com
Sat Apr 14 04:41:16 UTC 2018
>Writing your private field to an object that's not an instance of your
class.
>and then invoking the above write method with a this value that's not an
instance of A, such as a proxy.
Given:
class A {
private id = 0;
private method(value) {
return value;
}
write(value) {
private(this)["id"] = private["method"](value);
}
}
I imagine this means trying to do something along the lines of:
(new A()).write.call({}, 'pawned');
This would fail. The private syntax call site would be scoped to the
provider class. For example imagine the current possible transpilation of
this:
;(function (){
var registry = WeakMap();
function A () {
registry.set(this, {id: 0})
}
A.prototype.write: function () {
registry.get(this)["id"] =
registry.get(this.constructor)["method"].call(this, value);
}
// shared(i.e private methods)
registry.set(A, {
method: function (value) {
return value;
}
});
return A
})();
Trying to do the the afore-mentioned forge here would currently fail along
the lines of cannot read property "id" of "undefined".
On Sat, Apr 14, 2018 at 1:49 AM, Michael Theriot <
michael.lee.theriot at gmail.com> wrote:
> I'd imagine that would fail the same way proxies fail on typed arrays.
>
> > On Apr 13, 2018, at 6:26 PM, Waldemar Horwat <waldemar at google.com>
> wrote:
> >
> >> On 04/13/2018 01:38 AM, Sultan wrote:
> >> The proposal is an explainer with regards to an alternative sigil-less
> syntax to back private fields/methods.
> >>> What does private(this)[property] do?
> >> "private(this)[property]" and alternatively "private[property]" or
> "private.property" all invoke access of a private "property" on the "this"
> instance of the class, symmetrical to thesyntax/function nature of both the
> "super" and"import" keywords.
> >>> How do private fields come into existence?
> >> Unless i've misunderstood what is meant by "come into existence" the
> proposals makes use of the reserved "private" keyword to define private
> fields i.e "private id = 1".
> >
> > I was asking about what creates those fields.
> >
> >>> What's private about private fields?
> >> Outside of a private fields provider class, private fields/methods
> would not be accessible.
> >>> How do you prevent them from being forged or stuck onto unrelated
> objects?
> >> What do you mean by this?
> >
> > Writing your private field to an object that's not an instance of your
> class.
> >
> > class A {
> > private id = ...;
> > private foo = ...;
> > write(value) {
> > private(this)["id"] = value;
> > private(this)["foo"] = ... my private secret that anyone outside the
> class must not learn ...;
> > }
> > }
> >
> > and then invoking the above write method with a this value that's not an
> instance of A, such as a proxy.
> >
> > Waldemar
> > _______________________________________________
> > es-discuss mailing list
> > es-discuss at mozilla.org
> > https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180414/ced648da/attachment.html>
More information about the es-discuss
mailing list