1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JavaScript】プロトタイプオブジェクトについて1

Posted at

※当方駆け出しエンジニアのため、間違っていることも多々あると思いますので、ご了承ください。また、間違いに気付いた方はご一報いただけると幸いです。

##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を参照するので、影響する。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?