2016-04-17 18 views
3

なぜTypeScriptはプライベート変数をカプセル化しませんか?TypeScriptがプライベートフィールドをカプセル化しないのはなぜですか?

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変数が公開されている:私は、次のJavaScriptを取得するコンパイルすると

private engine: string; 

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

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

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

には、以下の活字体を考えます。なぜTypeScriptは次のようなものを作りません:

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

答えて

3

パフォーマンス上の理由から、 Anders氏は、次のように述べています。「プライベートストレージにコンストラクタ関数のローカル変数を使用することの問題は、プロトタイプオブジェクトの関数からアクセスできないことです(生成されたJavaScriptでクラスのメソッドがどのようになるか) はもっと多くのメモリを消費します ...ご覧のとおり、プロトタイプを通じてすべてのインスタンスが共有する単一の関数オブジェクトの代わりに、インスタンスごとに1つの関数オブジェクトを作成する必要があります。 議論についてはこちらをご覧ください:https://typescript.codeplex.com/discussions/397651

またはhereを、

「パターンをパフォーマンスのオーバーヘッドの多くを持ってJavaScriptで強制プライベートメンバーのために活字体は主に大規模なアプリケーションをターゲットとしているので、パフォーマンスのオーバーヘッドでコーディングしてコンパイルすることは最適ではありません」
関連する問題