Nicolò Ribaudo c5279eeca4
[static private] Use explicit descriptors instead of an object (#8620)
This is similar to ec69b4bb1256c061ac76f53dfed09c4283ec6a31, which
was about private instance fields.

Private properties can be non-writable (thanks to decorators), or have
get/set accessors. If we stored this information on the `privateClass`
object, we would need to always use `Object.getOwnPropertyDescriptor`
before reading or writing a property because accessors need to be called
with the correct `this` context (it should be the actual class, not the
object hat stores the private properties). This commit simplifies that
operation a bit by removing the container object.

It also have another advantage, which instance fields already have
thanks to the use of separate weakmaps: unused private static fields
can be tree-shaken away or garbage-collected, while properties of an
object can't. Also, they can be easilier minified.
2018-09-05 15:08:40 +02:00

33 lines
674 B
JavaScript

function classFactory() {
var _class, _temp, _foo, _bar;
return _temp = _class = class Foo {
constructor() {
_foo.set(this, {
writable: true,
value: "foo"
});
}
instance() {
return babelHelpers.classPrivateFieldGet(this, _foo);
}
static() {
return babelHelpers.classStaticPrivateFieldSpecGet(Foo, _class, _bar);
}
static instance(inst) {
return babelHelpers.classPrivateFieldGet(inst, _foo);
}
static static() {
return babelHelpers.classStaticPrivateFieldSpecGet(Foo, _class, _bar);
}
}, _foo = new WeakMap(), _bar = {
writable: true,
value: "bar"
}, _temp;
}