Aller au contenu principal

@babel/plugin-transform-private-property-in-object

Traduction Bêta Non Officielle

Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →

info

Ce plugin est inclus dans @babel/preset-env, dans ES2022

Exemple

Entrée

JavaScript
class Foo {
#bar = "bar";

test(obj) {
return #bar in obj;
}
}

Sortie

JavaScript
class Foo {
constructor() {
_bar.set(this, {
writable: true,
value: "bar",
});
}

test() {
return _bar.has(this);
}
}

var _bar = new WeakMap();

Installation

npm install --save-dev @babel/plugin-transform-private-property-in-object

Utilisation

Avec un fichier de configuration (Recommandé)

babel.config.json
{
"plugins": ["@babel/plugin-transform-private-property-in-object"]
}

Via CLI

Shell
babel --plugins @babel/plugin-transform-private-property-in-object

Via l'API Node

JavaScript
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-private-property-in-object"],
});

Options

loose

boolean, valeur par défaut : false.

note

Le paramètre de configuration loose doit être identique à celui de @babel/transform-class-properties.

Lorsqu'activé, les expressions in sur des propriétés privées vérifieront les propriétés propres (par opposition aux héritées) de l'objet, au lieu de contrôler leur présence dans un WeakSet. Cela améliore les performances et le débogage (accès normal aux propriétés vs .get()) au détriment d'un risque potentiel de fuite des "privés" via des méthodes comme Object.getOwnPropertyNames.

attention

Envisagez de migrer vers l'hypothèse de haut niveau privateFieldsAsProperties.

babel.config.json
{
"assumptions": {
"privateFieldsAsProperties": true,
"setPublicClassFields": true
}
}

Notez que privateFieldsAsProperties et setPublicClassFields doivent tous deux être définis sur true.

Exemple

Entrée

JavaScript
class Foo {
#bar = "bar";

test(obj) {
return #bar in obj;
}
}

Sortie

JavaScript
class Foo {
constructor() {
Object.defineProperty(this, _bar, {
writable: true,
value: "bar",
});
}

test() {
return Object.prototype.hasOwnProperty.call(this, _bar);
}
}

var _bar = babelHelpers.classPrivateFieldLooseKey("bar");
astuce

Vous pouvez en savoir plus sur la configuration des options de plugin ici

Références