2

この「コンストラクター」定義の利点を誰かに説明してもらえますか?

var Tree = (function () {
  function Tree(name) {
    this.name = name;
  }
  return Tree;
})();

それ以外の

var Tree = function(name) {
   this.name = name;
};

最初のバリアントは、TypeScript コンパイラによって生成されます。

4

3 に答える 3

6

TypeScript の場合、基本クラスをキャプチャするための追加のクロージャもあります。

class Animal {
    public run() {
        console.log('running!');
    }
}

class Giraffe extends Animal {
    public run() {
        super.run();
        console.log('... and looking awkward');
    }
}

放出する:

var Animal = (function () {
    function Animal() {
    }
    Animal.prototype.run = function () {
        console.log('running!');
    };
    return Animal;
})();

var Giraffe = (function (_super) {
    __extends(Giraffe, _super);
    function Giraffe() {
        _super.apply(this, arguments);
    }
    Giraffe.prototype.run = function () {
        _super.prototype.run.call(this);
        console.log('... and looking awkward');
    };
    return Giraffe;
})(Animal);

すぐに呼び出される関数に渡される_super.prototypeパラメーター (ここ) を介して基底クラスを参照するために を使用していることに注意してください。Animal追加のクロージャーがなければ、グローバル名前空間を汚染せずにその値を保存する場所はありません。

于 2013-08-15T22:13:41.640 に答える