コアJavaScript第6章第3部(プロトタイプチェーン、メソッドオーバーライド)


メソッドオーバーフロー


元のオブジェクトをそのままにしたまま、元のオブジェクトを削除して別のオブジェクトに置き換えるのではなく、別のオブジェクトをその上に配置します.
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