JavaScriptの基本:プロトタイプとプロトタイプの違い

ここに画像の説明を挿入

1.はじめに

  1. プロト(__プロト__)

    同様のjava言語では、継承の概念はクラス間で受け渡され、達成されますjavascriptが、クラスはなく、オブジェクトであるため、ではjavascript、継承の概念はオブジェクトとオブジェクト実装の間で受け渡されます。

    javascriptスコープが参照データ型に限定される場合継承を考慮して、参照データ型は分割されますFunctionが、Object2種類ですが、継承の問題では、オブジェクトを統合できるのと同じように、区別はFunctionありObjectません。

    __proto__そして、prototype異なる、プロトタイプのみ機能であり、かつ__proto__、その後FunctionObject両方インチ JavaScriptは__proto__、継承関係を決定するために使用されます。

    javascript継承の本質:__proto__オブジェクトAのプロパティが指すオブジェクトB。BAのプロトタイプオブジェクト(または親オブジェクト)です。オブジェクトAはオブジェクトBのプロパティとメソッドを使用でき、プロトタイプオブジェクトCも使用できます。上記のプロパティとメソッドは、再帰的に、いわゆるプロトタイプチェーンです。

    var A = {
          
          name:'前端收割机'}
    var B = {
          
          age:18}
    var c = {
          
          hobby:'摄影'}
    
    A.__proto__ = B;//将B设置为A的父对象
    B.__proto__ = C;//将C设置为B的父对象
    
    console.log(A.name) //前端收割机
    console.log(A.age)  //18
    console.log(A.hobby)//摄影
    
  2. プロトタイプ

    一つは__proto__継承の問題を実現します。それはそれをするべきprototypeですか?

    prototype実際、prototype実際の作業はFunctionコンストラクターとして時点で連続して進行してい__proto__ます。これは、公式の標準で定義された属性ではないため、prototype属性がクラスとクラスの間の継承パターンを模倣するのに役立ちます。

    new関数がキーワードによって呼び出されると、コンストラクターが実行されます。コンストラクターは、インスタンスオブジェクトの作成を担当し、インスタンスオブジェクトの__proto__プロパティをコンストラクターprototypeポイントして、コンストラクターprototypeのすべてのプロパティとメソッドの継承を実装し、コンストラクターにthisバインドします。インスタンスを作成し、関数本体を実行します。

    ここに画像の説明を挿入

    上の図から、fooオブジェクトとFoo関数のプロトタイプチェーンを見つけることができます

    1.fooオブジェクトプロトタイプチェーン

    foo.__proto__ == Foo.prototype;
    foo.__proto__.__proto__ == Foo.prototype.__proto__ == Object.prototype;
    foo.__proto__.__proto__.__proto__ == Foo.prototype.__proto__.__proto__ == Object.prototype.__proto__ == null;
    

    ここに画像の説明を挿入

    2.Fooコンストラクタープロトタイプチェーン

    Foo.__proto__ == Function.prototype;
    Foo.__proto__.__proto__ == Function.prototype.__proto__;
    Foo.__proto__.__proto__.__proto__ == Function.prototype.__proto__.__proto__ == Object.prototype.__proto__ == null;
    

    ここに画像の説明を挿入

    コンストラクターFooはプロトタイプチェーン上にないFoo.prototypeためFoo.prototype、プロパティとメソッドを継承することはできませんインスタンスfooのプロトタイプチェーンにはFoo.prototypeそれfooがあるためFoo.prototype、プロパティとメソッドを継承できます。

第二に、役割

  1. プロト(__プロト__):

    • オブジェクト間の継承を実現し、プロトタイプチェーンを形成します。
    • 子オブジェクトが親のプロパティとメソッドを使用できるようにします。
  2. プロトタイプ:

    • コンストラクターによってインスタンス化されたオブジェクトに、共通の属性とメソッドを見つけさせます(つまりfoo.__proto__ === Foo.prototype)。
    • 実装クラスとクラス間の継承パターンを模倣するためJavascriptprototypeプロパティ手段

3、まとめ

  1. プロト(和コンストラクタ属性)是**对象**所独有的;prototype属性があるの機能機能もオブジェクトなので、また機能を有しているので、独特__proto__およびconstructorプロパティを。
  2. __proto__属性の機能は、オブジェクトの属性にアクセスしたときです。属性がオブジェクトに存在しない場合は、その__proto__属性が指すオブジェクト(親オブジェクト)検索し、属性__proto__の最後まで検索を続けます。null子オブジェクトが親のプロパティとメソッドを使用できるようにします。
  3. prototypeロールのプロパティは共通のプロパティとメソッドを見つけることができる関数オブジェクトをインスタンス化することです。これは、実装クラスとクラスの間の継承パターンを模倣するプロパティJavascript手段ですprototype

おすすめ

転載: blog.csdn.net/imagine_tion/article/details/112793472