2013-07-08 48 views
2

當您使用繼承時,TypeScript編譯器會爲您生成__extends函數。較舊版本的tsc編譯器生成類似這樣的東西由TypeScript編譯器生成的__extends的新版本

var __extends = this.__extends || function (d, b) { 
    function __() { this.constructor = d; } 
    __.prototype = b.prototype; 
    d.prototype = new __(); 
}; 

它將b的一個實例設置爲d的原型鏈。這幾乎是我想要親手做的。

最新的版本(0.9)添加屬性/方法引用的拷貝看起來superflous是我:

var __extends = this.__extends || function (d, b) { 
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 
    function __() { this.constructor = d; } 
    __.prototype = b.prototype; 
    d.prototype = new __(); 
}; 

有誰知道這樣做的原因是什麼?

回答

4

它現在也考慮類的靜態屬性。

關鍵statment是:

for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 

將父類的靜態成員複製到子類。

例如爲:

class Foo{ 
    static x = "asdf"; 
} 

class Bar extends Foo{ 

} 

alert(Bar.x); 

Try it

原(現已關閉)錯誤報告:http://typescript.codeplex.com/workitem/825