コアJavaScript第6章第3部(プロトタイプチェーン、メソッドオーバーライド)
5030 ワード
メソッドオーバーフロー
元のオブジェクトをそのままにしたまま、元のオブジェクトを削除して別のオブジェクトに置き換えるのではなく、別のオブジェクトをその上に配置します.
ex)
var Person = function(name){
this.name = name;
};
Person.prototype.getName = function(){
return this.name;
};
var iu = new Person('지금');
iu.getName = function(){
return '바로' + this.name;
};
console.log(iu.getName()); //바로 지금
iuを基準に最も近いオブジェクト「自分のproperty」(iu.getName)を検索すると、__proto__
メソッドではなく、最も近いオブジェクト「Person.prototype.getName
」が検索されます.iu.getName = function(){
return '바로' + this.name;
};
このコードがなければ、console.log(iu.getName())
の結果しか得られません.지금
です.プロトタイプチェーン
あるデータの
__proto__
(オブジェクト)property内部には、__proto__
propertyのチェーンがあります.ex)
let a = [1,2]//let a = new Array(1,2)
Array原型の
__proto__
が対象です.プロトタイプ、プロトタイプはチェーンに沿って検索されます.Object vs Object.prototype
オブジェクト専用メソッドでは、オブジェクトに静的メソッドとして割り当てます.
Object.プロトタイプでは、任意のデータでのみ使用できる一般的な方法です.
たとえば、アレイの場合
let a = [];
console.dir(a);
結果は.このコンテンツの
__proto__
セクションでは、toString, hasOwnProperty, valueOf, isPrototypeOf
などのすべての変数を呼び出すことができ、それらが独自の方法であるようにすることができる.逆に,配列にオブジェクトが持つ静的メソッドなどの
Object.freeze
などのコンテンツを使用することはできない.(以下a.freeze()は不可能)ソース
コアJavaScript
Reference
この問題について(コアJavaScript第6章第3部(プロトタイプチェーン、メソッドオーバーライド)), 我々は、より多くの情報をここで見つけました https://velog.io/@khw970421/코어자바스크립트-6장-part3-프로토타입-체인-메서드-오버라이드テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol