Frage Wie erben STATIC-Methoden?


ich habe ein klasse

function Man(){...}

Man.drinkBeer = function(){...}

Ich muss erben SuperMan von Man. Und ich will immer noch meine Superman in der Lage sein, etwas Bier zu trinken.

Wie kann ich das machen?


5
2017-10-16 18:53


Ursprung


Antworten:


Object.setPrototypeOf(SuperMan, Man);

Dies wird das interne festlegen __proto__ Eigenschaft Ihrer abgeleiteten Funktion als Basisfunktion.
Daher erbt die abgeleitete Funktion alle Eigenschaften von der Basisfunktion.

Beachten Sie, dass dies die Funktionen selbst und nicht deren Funktionen betrifft prototypes.

Ja, es ist verwirrend.

Kein bestehender Browser unterstützt setPrototypeOf(); Stattdessen können Sie die nicht standardmäßige (aber funktionierende) Alternative verwenden:

SuperMan.__proto__ = Man;

6
2017-10-16 18:55



Das ist was CoffeeScript tut für Klassenvererbung:

var __hasProp = {}.hasOwnProperty,
    __extends = function (child, parent) {
        for (var key in parent) {
            if (__hasProp.call(parent, key)) child[key] = parent[key];
        }
        function ctor() {
            this.constructor = child;
        }
        ctor.prototype = parent.prototype;
        child.prototype = new ctor();
        child.__super__ = parent.prototype;
        return child;
    };

Und sie benutzen es so:

var Man = (function(){
    function Man() { ... }
    ...
    return Man;
})();
....
var SuperMan = (function(_super){
    __extends(SuperMan, _super);
    function SuperMan() { ... }
    ...
    return SuperMan;
})(Man);
....

2
2017-10-16 19:04