2017-02-16 9 views
1

次のコードは、a、c、cの2つの関数が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から継承されるので、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)を行いまず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.inheritsbのプロトタイプをcのものに割り当ててから、あなたが望む特別な機能を追加してみましょう。

関連する問題