0

有没有更好的方法让一个类从另一个类继承原型方法,并且仍然能够在继承的类上定义新的原型方法:

var ParentConstructor = function(){
};

ParentConstructor.prototype = {
    test: function () {
        console.log("Child");
    }
};

var ChildConstructor = function(){
    ParentConstructor.call(this)
};

ChildConstructor.prototype = {

    test2: "child proto"
};

var TempConstructor = function(){};
TempConstructor.prototype = ParentConstructor.prototype;
ChildConstructor.prototype = new TempConstructor();
ChildConstructor.prototype.constructor = ChildConstructor;



var child = new ChildConstructor();

child.test();
console.log(child.test2)

console.log(child, new ParentConstructor());

这不起作用,因为test2当我从ParentConstructor.

我尝试过其他方法来扩展一个类的原型方法,其中一些原型道具来自其他类,但我每次都失败了,因为我找不到每次都不覆盖以前方法的方法。

我也尝试过var Child = Object.create(Parent.Prototype),但是当我定义新道具时,我失去了父道具。

4

2 回答 2

2

设置继承应该在你在原型上定义新属性之前进行ChildConstructor。当你定义新的原型属性时,你也不应该覆盖整个prototype属性。相反,您可以简单地添加新属性,就像您已经对constructor属性所做的那样:

ChildConstructor.prototype = new ParentConstructor();
ChildConstructor.prototype.constructor = ChildConstructor;

ChildConstructor.prototype.test2 = "child proto";
于 2013-08-13T19:56:13.483 回答
0

我能想到的最好的例子来自:

http://robertnyman.com/2008/10/06/javascript-inheritance-how-and-why/

function Being() {
    this.living = true;
    this.breathes = function () {
       return true;
    };
}

function Robert() {
    // Robert.prototype = new Being(); /* edit */
    this.blogs = true;
    this.getsBored = function () {
        return "You betcha";
    };
}

Robert.prototype = new Being(); 

Robert.prototype.newMethod = function() {
    console.log('new method executed');
    return this;
}

注意这个例子,已经更新了,下面的第一条评论是针对我写的第一个代码,其中包含了罗伯特方法里面的原型。

于 2013-08-13T19:54:46.510 回答