Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 寄生遗传与超级方法_Javascript_Inheritance - Fatal编程技术网

Javascript 寄生遗传与超级方法

Javascript 寄生遗传与超级方法,javascript,inheritance,Javascript,Inheritance,道格拉斯·克罗克福德定义了他的寄生遗传 我想使用这种继承模式,因为它简单明了,但我想调用超级方法,而不定义Crockford调用的uber函数,因为我不想修改对象的原型。我该怎么办 我想有一些不错的语法,而不修改对象。。。这可能吗?在他的例子中,这是: function ZParenizor2(value) { var that = new Parenizor(value); that.toString = function () { if (this.getVa

道格拉斯·克罗克福德定义了他的寄生遗传

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

我想有一些不错的语法,而不修改对象。。。这可能吗?

在他的例子中,这是:

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”),然后在此基础上建立对象层次结构。

在他的示例中,这是:

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”),然后在此基础上建立对象层次结构。

我不知道是谁投票否决了您,但不评论问题的错误就投票否决是不酷的。所以我反对你。你不需要修改Oject的原型。您应该能够创建一个
inherit
函数来添加
uber
/
\u super
,而不用担心内置原型。这应该不会太难。这会给什么增加uber/_super,对不起?@cdarwin-。。。将uber添加到你的构造函数原型中。我不知道是谁否决了你,但不评论问题的错误就否决你是不酷的。所以我反对你。你不需要修改Oject的原型。您应该能够创建一个
inherit
函数来添加
uber
/
\u super
,而不用担心内置原型。这应该不会太难。这会给什么增加uber/_super,对不起?@cdarwin-。。。将uber添加到构造函数的原型中。我更新了我的问题:我希望在不修改对象原型的情况下拥有一个漂亮的sintax。我要求太多了吗?@cdarwin:
我要求太多了吗?
也许没有。但你肯定问错了。用Crockford的话说(就在你链接的页面上):
我写JavaScript已经8年了,我从来没有发现需要使用uber函数。超级概念在经典模式中相当重要,但在原型模式和功能模式中似乎没有必要。现在,我认为我早期尝试在JavaScript中支持经典模型是一个错误。
我更新了我的问题:我希望在不修改对象原型的情况下拥有一个好的sintax。我要求太多了吗?@cdarwin:
我要求太多了吗?
也许没有。但你肯定问错了。用Crockford的话说(就在你链接的页面上):
我写JavaScript已经8年了,我从来没有发现需要使用uber函数。超级概念在经典模式中相当重要,但在原型模式和功能模式中似乎没有必要。现在,我认为我早期尝试在JavaScript中支持经典模型是一个错误。