super

注意到如果你在子类中调用 super 它会像下面那样重定向 prototype

class Base {
    log() { console.log('hello world'); }
}

class Child extends Base {
    log() { super.log() };
}

生成:

var Base = (function () {
    function Base() {
    }
    Base.prototype.log = function () { console.log('hello world'); };
    return Base;
})();
var Child = (function (_super) {
    __extends(Child, _super);
    function Child() {
        _super.apply(this, arguments);
    }
    Child.prototype.log = function () { _super.prototype.log.call(this); };
    return Child;
})(Base);

留意 _super.prototype.log.call(this)

这意味着你不能在成员属性上使用 super 。取而代之的是你应该使用 this

class Base {
    log = () => { console.log('hello world'); }
}

class Child extends Base {
    logWorld() { this.log() };
}

注意因为只有一个 thisBaseChild 间共享,你需要使用不同的名字(这里是 loglogWorld)。

同样需要注意的是如果你尝试去错误使用 super,TypeScript 会警告你:

module quz {
    class Base {
        log = () => { console.log('hello world'); }
    }

    class Child extends Base {
        // ERROR : only `public` and `protected` methods of base class are accessible via `super`
        logWorld() { super.log() };
    }
}

results matching ""

    No results matching ""