【JavaScriptプログラミング】プロトタイプ、プロトタイプチェーン

4473 ワード

一、原型
隠れ家の原型
オブジェクトは、属性__proto__を有し、オブジェクトの暗黙的なプロトタイプは、オブジェクトを構成する構造関数のプロトタイプを指しています.これは、インスタンスが構造関数プロトタイプにおいて定義された属性および方法にアクセスできることを保証します.Object.getPrototypeOf()プロトタイプのプロパティ
各オブジェクトは、その内部で属性の一つであるプロトタイプ属性を初期化します.この属性は、オブジェクトを指すポインタです.このオブジェクトの用途は、すべてのインスタンスに共有される属性と方法を含みます.
トラック
プロトタイプオブジェクトには、prototypeという属性があります.この属性には、元のコンストラクターに戻るためのポインタが含まれています.
関係
instance.constructor.prototype = instance.__proto__
判断する
方法
説明
ハスOwnProperty()
自身の属性を検索
instance of
オブジェクト(例)と構造関数はプロトタイプチェーンに関係がありますか?
二、プロトタイプチェーン
定義
  • 私たちがオブジェクトの属性を訪問した時、自身にxxx属性があれば、それにアクセスする(固有の属性).
  • もしないならば、constructor属性を通じて(通って)その原型の鎖の前の段階の原型の対象を探し当てて、それがXXX属性があるかどうかを見ます.
  • は、このように再帰的に検索し、xxx属性が見つかるまで、またはプロトタイプチェーントップ__proto__オブジェクトまで.
  • 原型チェーン全体になかったらundefindに戻ります.
  • 私たちはこのような原型層を通して連結された関係をプロトタイプチェーンと呼びます.
  • アナログプロトタイプ
    var Shape = {
        getArea:function() {
            return "area: "+this.area;
        }
    };
    var Retangle = {
        getEdge:function() {
            return "edge: "+this.edge;
        }
    };
    var retangleIns = {
        area : 20,
        edge : 4
    };
    
    //      , 3           :
    // Shape 
    retangleIns.__proto__ = Retangle;
    Retangle.__proto__ = Shape;
    
    //       ,getArea   getEdge       
    console.log("      ,retangleIns.getArea() = " + retangleIns.getArea());
    console.log("      ,retangleIns.getEdge() = " + retangleIns.getEdge());