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.
33 lines
674 B
JavaScript
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;
|
|
}
|