javascript util.inherits在调用派生类函数时出现问题

时间:2017-02-16 03:53:15

标签: javascript inheritance

我有以下代码,其中有两个函数a,c和c继承自a。

function a(){
    console.log("constructor-a");
}

a.prototype.fun1 = function(){
    console.log("a-fun1");
}
a.prototype.fun2 = function(){
    console.log("a-fun2");
}


function c(){
    c.super_.call(this)
    console.log("constructor-c");
}

c.prototype.fun5 = function(){
    console.log("c-fun1");
}
c.prototype.fun6 = function(){
    console.log("c-fun2");
}
util.inherits(c,a);

var X = new c();
console.log("X instanceof a", X instanceof a);
console.log("X instanceof a", X instanceof c);

由于c继承自a,c和a的函数都应该可以从C的对象执行,但是,在这种情况下输出如下:

X.fun1() --> a-fun1
X.fun2() --> a-fun2
X.fun5() --> TypeError: X.fun5 is not a function
X.fun6() --> TypeError: X.fun6 is not a function

1 个答案:

答案 0 :(得分:1)

util.inherits(c,a),然后创建fun5fun6

function c(){
    c.super_.call(this)
    console.log("constructor-c");
}

util.inherits(c,a);

c.prototype.fun5 = function(){
    console.log("c-fun1");
}
c.prototype.fun6 = function(){
    console.log("c-fun2");
}

这是因为util.inherits的实施。该函数将使用父代的原型重新分配c的原型而不是合并。因此,让util.inherits首先将b的原型分配给c,然后添加您想要的额外功能。