寄生遗传和超级方法

时间:2012-07-26 17:45:42

标签: javascript inheritance

Douglas Crockford定义了他的寄生继承 here

我想使用这种继承模式,因为它简单明了,但我想调用超级方法而不定义Crockford所谓的uber函数,因为我不喜欢我想修改Object的原型。我该怎么办?

我希望有一些很好的语法,而不需要修改Object ......这可能吗?

1 个答案:

答案 0 :(得分:1)

在他的例子中,这个:

function ZParenizor2(value) {
    var that = new Parenizor(value);
    that.toString = function () {
        if (this.getValue()) {
            return this.uber('toString');
        }
        return "-0-"
    };
    return that;
}

会变成这样:

function ZParenizor2(value) {
    var that = new Parenizor(value);
    that.toString = function () {
        if (this.getValue()) {
            return Parenizor.prototype.toString.apply(this, arguments);
        }
        return "-0-"
    };
    return that;
}

- 编辑 -

另一方面,你也可以简单地定义一个名为BaseObject的新类,定义它上面的所有基本扩展方法(例如'uber'),然后将对象层次结构基于它。