JavaScriptの原型と原型チェーン


いくつかの概念
  • コンストラクタ:コンストラクタは実際には普通の関数であり、newオペレータを通じて、コンストラクタを使ってオブジェクトを迅速に作成することができます.
  • prototype:各コンストラクタ自体にプロポーチ属性があり、この属性値はオブジェクトであり、このオブジェクトはコンストラクタ属性を持ち、コンストラクタ自体を指す.
  • 例:構造関数によって作成されたオブジェクトは、この構造関数の一例として見なされ得る.
  • __proto_:構造関数によって作成された各オブジェクトの上には、一つの_u_があります.プロト.属性、この属性は構造関数のプロトタイプを指します.
  • 原型は何ですか
    JavaScriptでは、オブジェクトごとに原型オブジェクトがあります.オブジェクトは、元のオブジェクトから属性や方法を継承します.
    プロトタイプチェーンとは何ですか
    JavaScriptでは、オブジェクトの属性にアクセスすると、JSエンジンはまず、そのオブジェクト自身のオンラインでその属性を検索します.見つかったら、その属性の値を直接返します.見つからなかったら、オブジェクトの原型の上を探し続けます.オブジェクトのプロトタイプの上にもこの属性がない場合は、プロトタイプの上のプロトタイプの上を検索し続け、プロトタイプがnullであるまでは、JSエンジンがそのオブジェクトの属性値をundefinedに戻します.
    引き継ぐ
            /**
             * two methods to implement inheritance;
            */
    
            function Base(type){ 
                this.type = type;
            }
            Base.prototype.base=function(){
                console.log(`${this.type} is in base func`);
            }
            // method one
            function Sub(type){
                this.type = type;
            }
            Sub.prototype = Object.create(new Base('base'));
            Sub.prototype.sub=function(){
                console.log(`${this.type} is in sub func`);
            }
    
            // method two
            function Foo(type){
                this.type = type;
            }
            Object.setPrototypeOf( Foo.prototype, new Sub('sub'));
            Foo.prototype.foo=function(){
                console.log(`${this.type} is in foo func`);
            }
    
            let sub = new Sub('sub1');
            sub.base();
            sub.sub();
            sub instanceof Sub; // true
            sub instanceof Base; // true
    
            let foo = new Foo('foo1');
            foo.base();
            foo.sub();
            foo.foo();
            foo instanceof Foo; // true
            foo instanceof Sub; // true
            foo instanceof Base; // true
    
    いくつかのインスタンス
    Object.get Prottype
    次のいくつかの式の結果を予測します.
    Object.getPrototypeOf(function(){}).constructor === Function;
    Object.getPrototypeOf(Function).constructor === Function;
    Object.getPrototypeOf(Object.getPrototypeOf(Function)).constructor === Object;
    答え:
    true;
    
    どのように原型のないオブジェクトを作成しますか?
    let obj = Object.create(null);
    console.log(obj);
    このmediumで8.6 Kの賛を得た文章はProttypes in JavaScriptでよく説明されています.