[JavaScript]プロトタイプ(Prototype)

1480 ワード

プロトタイプ
proto=>ダンプ
[]2つのかっこ=>オブジェクトを非表示

非表示の[prototype]オブジェクトにアクセスします。


1.protoは来賓を通じてアクセスできる

let o = {};
console.log(o.__proto__);
protoと[[prototype]は違います!
(protoは[prototy]]オブジェクトにアクセスするレベルのようなものです)

2.Object.getPrototypeOfからアクセス可能

let o = {};
console.log(Object.getPrototypeOf(o));
来賓を通じてもメソッドを通じても、結果は同じです.

プロトタイプ

  • オブジェクトのプロパティまたはメソッドにアクセスすると、オブジェクトにプロパティ、メソッドが見つからない場合は、オブジェクトの[Prototype]オブジェクトにアクセスした後、そのプロパティ、メソッドが存在するかどうかを検索します.
    =>プロトタイプチェーンに沿って検索します.
  • プロトタイプチェーンに沿って検索するときに最初に現れる属性は、メソッドに近い.
  • すべての関数は、定義されると自動的にプロトタイプ属性を有します.(*矢印関数を除く*)
  • プロトタイプ属性に格納されている値は、コンストラクション関数という属性を持つオブジェクトであり、それ自体を指す関数が格納されている.
  • //함수 선언식이든 표현식이든 상관없이 prototype을 갖는다.
    function func1() {};
    let func2 = function() {};
    
    console.log(func1.prototype); //{constructor: func1}
    console.log(func2.prototype); //{constructor: func2}
  • newキーを持つ関数が呼び出されると、新しいオブジェクトが割り当てられ、自動的に返されます.
  • 、オブジェクトの作成時にthis.protoは構造関数のprototypeを自動的に代入する.
  • オブジェクトに希望する値がない場合は、プロトタイプで検索します.
  • function User(name){
    	//자동으로 대입
    	//this = {}
    	//this.__proto__ = User.prototype //{ constructor: User}
    	this.name = name;
    	//return this;
    }
    ※プロトタイプオブジェクトに共通メソッドが定義されていても、この値はポイント(.)前のオブジェクトを指しているので、正常に使用できます.