※当方駆け出しエンジニアのため、間違っていることも多々あると思いますので、ご了承ください。また、間違いに気付いた方はご一報いただけると幸いです。
##Object
全てのオブジェクトの元となるオブジェクト。
Array, Functionなどオブジェクト型のインスタンスが作られる時、全てObjectオブジェクトを継承している。
Objectはprototypeという特殊なオブジェクトを持っており、Objectを継承してたインスタンスオブジェクトは、prototypeを参照することができる。
prototypeはいくつかのメソッドを持っており、プロトタイプオブジェクトと呼ばれる。当然、インスタンスオブジェクトはプロトタイプオブジェクトを使用することができる。
イメージ
Object = {
prototype : { //プロトタイプオブジェクト
toString : function( ){ //プロトタイプメソッド
};
};
};
const obj = { }; //オブジェクト作成時に、Objectを継承する。
obj.toString() //プロトタイプメソッドを参照できる。
なお、インスタンス作成時にprototypeオブジェクトが複製されて、インスタンスがprototypeオブジェクトを持つ訳でなく、Objectオブジェクトのprototypeオブジェクトを参照できるようになっていることに注意。
##もし、インスタンスにprototypeメソッドと同名のメソッドを追加したら?
const obj= {
toString : function(){
console.log("new to string");
}
};
obj.toString();
// new to string
同名で定義した場合、プロトタイプメソッドよりインスタンスメソッドが優先される。
##Object.prototypeにプロパティーを追加した場合、インスタンスへの変化は??
const obj = {};
//Objectオブジェクトを継承するインスタンスobjを作成。
console.log(obj.name);
//undifined
//定義していないので当然
Object.prototype.name = "taro";
//Objectオブジェクトのprototypeオブジェクトのプロパティnameに"taro"という値を格納。
console.log(obj.name);
//taro
//objもObjectオブジェクトのprototypeオブジェクトのプロパティnameを参照するので、影響する。