什么是constructor.prototype引用?

时间:2017-06-10 20:55:09

标签: typescript

在打字稿中阅读装饰器的文档(我在这个片段上进行了简化:

function sealed(constructor: Function) {
    Object.seal(constructor);
    Object.seal(constructor.prototype);
}
  

当执行@sealed时,它将密封构造函数及其原型。

constructor.prototype指向什么?这种典型的继承有时会让人感到困惑。

1 个答案:

答案 0 :(得分:1)

你可以通过查看一个简单的例子和​​结果javascript来检查出来:

class A {
    fn1() { }
}

class B extends A {
    fn2() { }
}

已编译的js:

var A = (function () {
    function A() {
    }
    A.prototype.fn1 = function () { };
    return A;
}());
var B = (function (_super) {
    __extends(B, _super);
    function B() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    B.prototype.fn2 = function () { };
    return B;
}(A));

装饰器函数接收的constructorAB,它们是构造函数,如果在开发人员控制台中键入A,您将看到:< / p>

function A() {
    }

B的类似内容:

function B() {
        return _super !== null && _super.apply(this, arguments) || this;
    }

constructor.prototype部分引用了该类的原型,因此A.prototype将显示:

Object {fn1: function, constructor: function}

B.prototype将显示:

A {constructor: function, fn2: function}