javascript - Hvorfor kapsler ikke TypeScript inn private felt?


Hvorfor kapsler ikke TypeScript inn de private variablene?

Gitt følgende TypeScript:

    private engine: string;

    constructor(engine: string) {
        this.engine = engine;
    }

    start() {
        console.log('Starting engine ' + this.engine);
    }
}

var car = new Car("Fiat");
car.start();

Når jeg kompilerer får jeg følgende JavaScript:

var Car = (function () {
    function Car(engine) {
        this.engine = engine;
    }
    Car.prototype.start = function () {
        console.log('Starting engine ' + this.engine);
    };
    return Car;
}());
var car = new Car("Fiat");
car.start();

engine-variabelen er offentlig. Hvorfor produserer ikke TypeScript noe mer som:

var Car = (function () {
    var _engine;
    function Car(engine) {
        _engine = engine;
    }
    Car.prototype.start = function () {
        console.log('Starting engine ' + _engine);
    };
    return Car;
}());

Svar #1

Av ytelsesårsaker. Fra Anders, "Problemet med å bruke konstruktørfunksjonens lokale variabler for privat lagring er at de ikke kan aksesseres fra funksjoner på prototype-objektet (som er hva metoder på en klasse blir i den genererte JavaScript). I stedet må du lage lokale funksjonsobjekter, og det bruker mye mer minne... Som du kan se, må du lage ett funksjonsobjekt per instans i stedet for et enkelt funksjonsobjekt som deles av alle instanser gjennom prototypen." Se her for en diskusjon: https://typescript.codeplex.com/discussions/397651

eller her, "mønstre for tvungne private medlemmer i JavaScript har mye ytelsesoverhead. TypeScript retter seg hovedsakelig mot store applikasjoner, så det å kompilere til kode med ytelsesoverhead er ikke optimalt"

Relaterte artikler