2017-03-26 6 views
0

これは間違いありませんが、私はJavaScriptと少し混乱しています。別の関数の中でメソッドを呼びたい。私はこれを処理するために少し時間を費やしており、これまでに得たものはすべて2番目のコードです。私はコメントに記載されているような類似の解決策があるかどうかを知りたいと思います。私が確認したいプロトタイプなしで他の関数のメソッドを呼び出す方法

function Student() { 
    this.greeting = function() { 
    alert('Hi! I\'m student.'); 
    }; 
}; 

function Teacher() { 
    Student.call(this) 
    this.greeting = function() { 
    Student.??? // here I want something like "inherited", or call Student.greeting() 
    alert('and I like apples'); 
    }; 
}; 

は、ない別のオプションプロトタイピングのようにあります:

function Student() { 

}; 

Student.prototype.greeting = function() { 
    alert('Hi! I\'m student.'); 
    }; 

function Teacher() { 
    Student.call(this); 
    this.greeting = function() { 
    Student.prototype.greeting(); 
     alert('and I like apples'); 
    }; 
}; 

ありがとう

+0

これは、オブジェクトのリンクにプロトタイプチェーンを使用するJavaScriptの趣旨ではないクラス継承でシャドウイングを使用しようとしているようです。例えばObject.createを使って他のオブジェクトに委譲すれば、 '[[Prototype]] 'チェインを使ってこれらのメソッドにアクセスすることができます。 –

答えて

-1

学生が、それはまた、コンストラクタで、あなたの場合には、機能です。 は「学生」はあなたのコードでは、Student.call

function Teacher() { 
    var stdnt = new Student() 
    this.greeting = function() { 
    stdnt.greeting() 
    alert('and I like apples'); 
    }; 
}; 

また、コンストラクタ関数学生の呼び出しによって返されたオブジェクトを保存する必要があり呼び出すには(これは)単なる関数呼び出しの学生()と等価である - を作成することなく、新しいオブジェクト

更新2。内部関数stdntの呼び出しが "closure"と呼ばれます

+0

唯一の可能性は、Student関数をインスタンス化することですか? – lyborko

+0

あなたの例では、挨拶はstudent – Paul

+0

のメンバー関数です。はい、Studentコンストラクタを呼び出して新しいオブジェクトをインスタンス化する必要があります。原因の他の方法があるかもしれません。たとえば、 – nahab

関連する問題