2016-04-15 1 views
0

私はJavaScriptのプロトタイプ継承をブラッシュアップしており、その必要性について大きな疑問を抱いています。私はそれがなぜ非常に重要なのか理由を理解することができません。私はJavaScriptでプロトタイプ継承を行う必要があるので、追加する新しいプロパティを動的に伝播できますか?

Manager.prototype = Object.create(Employee.prototype);

を削除した場合、私はそれだけを見ることができ、上記のスニペットで

function Employee() { 
 
    this.name = "geetha"; 
 
    this.dept = "general"; 
 
} 
 
Employee.prototype.designation = "nothing"; 
 

 
function Manager() { 
 
    Employee.call(this); 
 
    this.title = "mr"; 
 
} 
 
Manager.prototype = Object.create(Employee.prototype); 
 

 
var mark = new Manager; 
 

 
console.log(mark.name); 
 
console.log(mark.dept); 
 
console.log(mark.title); 
 
console.log(mark.designation);
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>

:私は、以下に示す基本的なコードスニペットを実行してきました「従業員」コンストラクタのために外出先に新しいプロパティを追加することができなくなるそれはオブジェクトのプロトタイプですトリクルダウンします。そうでなければ、既に定義されたプロパティを持つコンテンツであれば、 "従業員"に "Manager"のプロトタイプを作る必要はありません。マネージャーからのEmployeeのコンストラクター呼び出しは、そのプロパティの取得を完了します。だから、私はこのコンセプトで本当に重要なことを見逃していますか?

ありがとうございます!

+0

ご理解のほどよろしくお願いいたします。より明確にするために、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chainでこのトピックを読むことをお勧めします。 –

答えて

0

あなたは、あなたが実際に継承を使用していないライン

Manager.prototype = Object.create(Employee.prototype); 

を使用しない場合。 Employeeインスタンスで初期化されるのと同じように、単にEmployeeコンストラクタを使用してManagerインスタンスの変数を初期化しているだけです。それはプロトタイプチェーンになりませんので、あなたがManagerインスタンスにそのプロパティdesignationが利用できなくなります継承を使用しない場合は、注意すべき

事は、このライン

Employee.prototype.designation = "nothing"; 

です。

関連する問題