为什么TypeScript不封装私有变量?
给出以下TypeScript:
private engine: string;
constructor(engine: string) {
this.engine = engine;
}
start() {
console.log('Starting engine ' + this.engine);
}
}
var car = new Car("Fiat");
car.start();
当我编译时,我得到以下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
变量是公开的。为什么TypeScript不会产生更像:
var Car = (function () {
var _engine;
function Car(engine) {
_engine = engine;
}
Car.prototype.start = function () {
console.log('Starting engine ' + _engine);
};
return Car;
}());
答案 0 :(得分:3)
出于性能原因。来自Anders,"使用构造函数局部变量进行私有存储的问题是它们无法从原型对象上的函数访问(这是类生成的JavaScript中的方法)。相反,你需要创建本地函数对象,消耗更多内存 ...正如你所看到的,你需要为每个实例创建一个函数对象,而不是通过所有实例共享的单个函数对象原型。" 请参阅此处进行讨论:https://typescript.codeplex.com/discussions/397651
或here," JavaScript中强制私有成员的模式有很多性能开销。 TypeScript主要针对大型应用程序,因此编译代码时性能开销并不是最佳的#34;