【问题标题】:Why doesn't TypeScript encapsulate private fields? [duplicate]为什么 TypeScript 不封装私有字段? [复制]
【发布时间】:2016-08-09 09:40:11
【问题描述】:

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;
}());

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    出于性能原因。来自 Anders,“使用构造函数局部变量进行私有存储的问题是它们不能从原型对象上的函数访问(这是生成的 JavaScript 中类上的方法)。相反,您需要创建本地函数对象并且消耗更多内存...正如您所见,您需要为每个实例创建一个函数对象,而不是通过原型由所有实例共享的单个函数对象。” 请参阅此处进行讨论:https://typescript.codeplex.com/discussions/397651

    here,“JavaScript 中强制私有成员的模式有很多性能开销。TypeScript 主要针对大型应用程序,因此编译为具有性能开销的代码并不是最佳的”

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 2017-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2015-03-01
      • 2016-10-15
      • 2012-09-24
      相关资源
      最近更新 更多