Saltar al contenido principal

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

Traducción Beta No Oficial

Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →

información

Este plugin está incluido en @babel/preset-env, como parte de ES2022

Ejemplo

Entrada

JavaScript
class Foo {
#bar = "bar";

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

Salida

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

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

var _bar = new WeakMap();

Instalación

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

Uso

Mediante un archivo de configuración (Recomendado)

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

Mediante la CLI

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

Mediante la API de Node

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

Opciones

loose

boolean, valor predeterminado: false.

nota

La configuración del modo loose debe ser idéntica a la de @babel/transform-class-properties.

Cuando es true, las expresiones in para propiedades privadas verificarán las propiedades propias (en lugar de heredadas) del objeto, en vez de comprobar su presencia dentro de un WeakSet. Esto mejora el rendimiento y la depuración (acceso normal a propiedades vs .get()) a costa de posibles fugas de "privados" mediante métodos como Object.getOwnPropertyNames.

precaución

Considera migrar al supuesto de alto nivel privateFieldsAsProperties.

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

Ten en cuenta que tanto privateFieldsAsProperties como setPublicClassFields deben configurarse como true.

Ejemplo

Entrada

JavaScript
class Foo {
#bar = "bar";

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

Salida

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");
consejo

Puedes leer más sobre cómo configurar opciones de plugins aquí

Referencias