jsコンストラクタとプロトタイプの原理と使用例分析


本論文の実例はjsコンストラクタとプロトタイプの原理と使い方を述べている。皆さんに参考にしてあげます。具体的には以下の通りです。
すべての参照タイプ(関数、配列、オブジェクト)は、__u_u uプロト.属性(隠しタイプ)
すべての関数はprototype属性(明示的なプロトタイプ)を持っています。(関数のみ)
プロトタイプオブジェクト:プロトタイプ属性を持つオブジェクトは、関数を定義するときに作成されます。
同前proto_prototypeとconstructor
以下の三つの属性の定義は非常に重要であり、常に原型の中に貫かれている。
  • prototype:この属性はコンストラクタだけがあり、現在のコンストラクタの原型オブジェクトを指しています。
  • __proto_:この属性はどのオブジェクトにもある属性です。現在のオブジェクトを作成する構造関数の原型オブジェクトを指しています。属性は標準ではないので、この属性の値を勝手に変更しないでください。プロトタイプチェーンを破壊しないようにしてください。プロト.連結されたチェーンです。
  • constructor:この属性はプロトタイプのオブジェクトにしかありません。プロトタイプの属性がある構造関数を標準的に返します。
  • 構造関数の特徴:
    a:コンストラクタの最初の文字は大文字でなければなりません。普通の関数と区別します。
    b:内部で使用されるthisオブジェクトは、これから生成されるインスタンスオブジェクトを指します。
    c:Newを使ってインスタンスオブジェクトを生成します。
    functionで定義されているオブジェクトにはプロトタイプの属性があります。newで生成されたオブジェクトにはこのプロトタイプの属性がありません。(Personはオブジェクトです。)
    Personは対象です。プロトタイプの原型属性があります。prototype属性は自分のprototypeの対象があります。pototypeの対象も自分のconstruct属性があります。construct属性は自分のconstructorの対象があります。不思議なことが起こります。この最後のconstructorの対象は私達が作ったfunction関数そのものです。
    
    function Person(name){
     this.name=name;
     this.showMe=function(){
     alert(this.name)
     }
    }
    var one=new Person('js-yeluosen');
    one.showMe();
    console.log(one.prototype)//undefined
    console.log(typeof Person.prototype)//Obiect
    console.log(Person.prototype)
    console.log(Person.prototype.constructor)
    
    

    いくつかの方法を呼び出したり、属性を検索したりする場合、まず自分で呼び出して検索します。属性や方法がない場合は、その属性に行きます。プロト.属性で検索を呼び出します。つまり、そのコンストラクションのプロトタイプから検索を呼び出します。
    関数オブジェクト自体の属性または方法がプロトタイプの属性または方法と同名の場合:
        1、デフォルトで呼び出したのは、関数オブジェクト自体の属性または方法です。
        2、原型によって増加した属性や方法は確かに存在します。
        3、関数オブジェクト自体の属性または方法の優先度は、プロトタイプの属性または方法より高いです。
    
    function Hero(){
     this.name='jiangyx'
    }
    Hero.prototype.name="yeluosen"
    var mm=new Hero()
    //                ,           ,             ,     __proto__       ,         prototype     
    alert(mm.name)//jiangyx
    alert(mm.__proto__.name)//jiangyx
    delete mm.name
    alert(mm.name)//yeluosen
    
    
    
    //      
    function Word(words){
      this.words = words;
    }
    Word.prototype = {
      alert(){
        alert(this.words);
      }
    }
    //    
    var w = new Word("hello world");
    w.print = function(){
      console.log(this.words);
    }
    w.print(); //hello world
    //                ,           ,             ,     __proto__       ,         prototype     
    // w    alert()  ,    Word()        alert(),            。     
    w.alert(); //hello world
    //   w                 ,         
    // w.__proto__ === Word.prototype
    
    
    print()方法はw例自体が持つ方法ですので、w.print()はハローワールドを印刷します。alert()はw例の方法ではなく、構造関数に属する方法であり、w.alert()もハローワールドを印刷します。構成関数を継承する方法の例です。
    実例wの陰的プロトタイプはその構造関数の明示的プロトタイプを指し、指し示す意味は恒等
    
    w.__proto__ === Word.prototype
    締め括りをつける
    1、prototypeはコンストラクタだけあって、コンストラクタの原型を指します。
    2、ガクップロト.どのオブジェクトにもあります。現在のオブジェクトの構造関数を生成するプロトタイプを指します。
    3、constructorは原型の対象だけあって、デフォルトではprototype属性のある構造関数を指して、原型チェーンを使って継承した後、新しい原型の対象にconstrutor属性を追加して、構造関数を指す。
    4、どのオブジェクトでも構造関数自体を含む独自の構造関数があります。
    関心のある友達はオンラインHTML/CSS/JavaScriptコードを使ってツールを実行できます。http://tools.jb51.net/code/HtmlJsRunは上記のコードの運行効果をテストします。
    JavaScriptに関する詳細な内容について興味がある読者は、このサイトのテーマを見ることができます。「javascript対象向け入門教程」「JavaScriptエラーとデバッグテクニックのまとめ」「JavaScriptデータ構造とアルゴリズム技術のまとめ」「JavaScriptはアルゴリズムと技術の総括を遍歴します。」「JavaScript数学演算の使い方のまとめ
    本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。