如何继承STATIC方法?

时间:2013-10-16 18:53:46

标签: javascript oop design-patterns inheritance

我有一个班级

function Man(){...}

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

我需要从SuperMan继承Man。我仍然希望我的Superman可以喝点啤酒。

我该怎么做?

2 个答案:

答案 0 :(得分:6)

Object.setPrototypeOf(SuperMan, Man);

这会将派生函数的内部__proto__属性设置为基函数 因此,派生函数将继承基函数的所有属性。

请注意,这会影响函数本身,而不会影响prototype s。

是的,这令人困惑。

现有浏览器不支持setPrototypeOf();相反,您可以使用非标准(但有效)替代方案:

SuperMan.__proto__ = Man;

答案 1 :(得分:2)

这是CoffeeScriptclass inheritance的作用:

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

他们这样使用它:

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