Vai al contenuto principale

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

Traduzione Beta Non Ufficiale

Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →

informazioni

Questo plugin è incluso in @babel/preset-env, nella specifica ES2022

Esempio

In

JavaScript
class Foo {
#bar = "bar";

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

Out

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

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

var _bar = new WeakMap();

Installazione

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

Utilizzo

Con un file di configurazione (Consigliato)

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

Tramite CLI

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

Tramite Node API

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

Opzioni

loose

boolean, predefinito false.

nota

L'impostazione di configurazione loose deve essere identica a quella di @babel/transform-class-properties.

Quando impostata su true, le espressioni in per le proprietà private controlleranno le proprietà proprie (anziché ereditate) dell'oggetto, invece di verificare la presenza all'interno di un WeakSet. Ciò migliora prestazioni e debugging (accesso diretto alle proprietà vs .get()) al costo della potenziale diffusione di "privati" tramite metodi come Object.getOwnPropertyNames.

attenzione

Considera di migrare all'assunzione di primo livello privateFieldsAsProperties.

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

Nota che sia privateFieldsAsProperties che setPublicClassFields devono essere impostati su true.

Esempio

In

JavaScript
class Foo {
#bar = "bar";

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

Out

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

Maggiori informazioni sulla configurazione delle opzioni del plugin sono disponibili qui

Riferimenti