2017-02-16 2 views
1

У меня есть следующий код, где есть две функции a, c и c, наследуемые от a.Проблема с javascript util.inherits при вызове функций производного класса

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, однако, в этом случае выходы следующим образом:

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 
+0

'util.inherits' необходимо вызывать перед назначением прототипу. – Bergi

ответ

1

ли util.inherits(c,a) сначала, а затем создайте fun5 и fun6.

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, а затем добавим дополнительные функции, которые вы хотите.

Смежные вопросы