2

当你使用继承时,TypeScript 编译器会为你生成 __extends 函数。旧版本的 tsc 编译器生成类似这样的东西

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

它将 b 的一个实例设置为 d 的原型链。这也几乎是我要手动完成的。

最新版本(0.9)添加了对我来说看起来多余的属性/方法引用的复制:

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

1 回答 1

4

它现在也尊重类的静态属性。

关键声明是:

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

尝试一下

原始(现已关闭)错误报告:http ://typescript.codeplex.com/workitem/825

于 2013-07-08T09:58:30.547 回答