7、初対面の相手

7805 ワード

相手は何ですか
JavaScriptのすべてのものは対象です.文字列、数字、配列、日付などです.JavaScriptでは、オブジェクトは属性と方法を持つデータです.
オブジェクトObject:
  • はJSの中でこのような話があって、万物はすべて対象で、これも私達の今後の学習の重点で、後で私達の学んだものはすべて対象の
  • です.
  • オブジェクトはオブジェクトに等しくなく、変数と違って、二つのオブジェクトの内容は同じでもなく、メモリ問題に関連しています.オブジェクトを作成していないと、メモリの中に新しい空間を開き、新しいメモリアドレスを持っています.
    var a = 10;
    var b = 10;
    console.log(a === b);//  true,           ,       
    //         
    var obj1 = {name:"  ",age:18};
    var obj2 = {name:"  ",age:18}; 
    console.log(obj1 == obj2);//  false,       ,      
    
    オブジェクトの基本構造と操作:
    対象も実はデータを保存するものです.多くのものを保存できます.覚えていますか?関数を学ぶ時に、関数もオブジェクトであり、配列と似ていると言ったことがありますが、違いは、その内部の各値が個々の属性名で保存されています.
    //           ,   Object JS       
    //                      ,  ,         new
    var obj = new Object();
    //             ?,        
        obj.name = "    ";
        obj.age = "    ";
        //   ,             ,        ?
        console.name( obj.name );//          
        //      ,         ,       ,                 
        obj.name = "    ";
        console.log( obj.name )//  ,      
    //                、  、   ,             
    delete obj.name; //     ,     
    console.log(obj.name);//  undefined,     
    
    以下では、対象の通常の操作をまとめます.
  • 声明の対象:var = new Object;
  • オブジェクトに属性を追加します. . = ;
  • は、オブジェクトの保存の値を取得する. . ;
  • オブジェクトの属性の値を変更する: . = ;
  • オブジェクトの属性を削除します.delete .
  • オブジェクトの属性の参照:
    オブジェクトの属性の2つの参照方法:
  • オブジェクト名.属性名は、例えば、Obj.name
  • オブジェクト名[属性名]例えば、Obj[name]注意:中かっこに文字列が書いてあるので、引用符で囲む必要があります.
    オブジェクトの略字:
    上で相手を作るのはちょっと面倒くさいと思いますか?そうです.関数のようにオブジェクトを作成するのにも簡単な方法があります.
    var obj = {
        name:"    ",
        //                 
        age:"    ",
        //              ,      ,        
        //           ,        ,                   
        myName:function(){
            console.log(this.name);
        }
         //this       ,             ,         ,
    };//      
    
    このような字面量の作成方法をまとめてみます.
  • はnewを必要としないで、属性をすべて括弧の中に置くのです.var = { : };
  • 属性名の前にオブジェクト名が必要ではなく、等号をコロンに変更します.コードの後の番号をカンマ
  • に変更します.
  • オブジェクトの属性は、任意のデータを格納することができ、任意の方法で作成されたオブジェクトは、このように
  • である.
    もちろん、中にはキーワードがあります.this、このキーワードはオブジェクトを柔軟に設定できます.中のいくつかのデータを最後のthisに書き込むことを心配しなくてもいいです.
    For/Inサイクル:
    対象とは何かを知っている以上、前に述べた循環タイプを振り返ってみましょう.for/inサイクルの前に言ったことがあります.for/inサイクルは対象の属性を遍歴することができます.試してみます.
    //        ,
    var obj = {
       name:"  ",
       age:18,
       gender:" "
    };
    //    for/in  
    for(var i in obj){
       console.log(i);
    };
    //     :name  age  gender
    
    上記の例を通して、
  • for/inとforサイクルの違いは、for/inにforがない3つの文の代わりに、 in
  • for/inサイクルは、実行するたびにオブジェクトからオブジェクト名を取り出し、変数i
  • に値を付与する.
  • その循環条件はオブジェクト中の属性の個数であり、オブジェクト中の属性を取ったら自動的にループを停止します.
    thisとは何ですか
    JavaScript thisのキーワードは、所属する対象を指します.それは異なる値を持っています.具体的にはその使用位置に依存します.
  • 方法では、thisは所有者オブジェクトを指す.
  • 単独の場合、thisはグローバルオブジェクトを指します.
  • は、関数において、thisはグローバルオブジェクトを意味します.
  • は、関数において、厳密なモードで、thisはundefinedである.イベントにおいて、thisとは、イベントを受信する要素を意味する.
  • thisが問題を指すのは簡単に言えば、
  • 関数の内部のthisは、関数の使用者を指し、構造関数であれば、インスタンスオブジェクトを指す.普通の関数であれば、thisはwindow
  • を指します.
  • thisには穴がありますので、非常に回るので、使う時は上記の言葉に従って分析してください.
  • もっと詳しいthisの紹介はこれを見てください.実例を合わせたthisの初紹介を見てください.これを見てください.
    オブジェクトの異なる作成方法:
    私たちは大量にオブジェクトを作成する必要があるので、上記のような方法の弊害を発見しましたか?そうです.たくさんの仕事が必要ですが、彼らは似ています.私たちをもっと効率的にする方法がありますか?
    工場モードでオブジェクトを作成:
    //      
    function Person(name,age){
    //          ,            this
            var obj = new Object;
            obj.name = name ;
            obj.age = age ;
            obj.myName = function (){
                console.log(this.name);
            };
            //         
            return obj;
    }
    //  ,           ,
    var obj1 = Person("    ",18);
    var obj2 = Person("    ,"18);
    //       myName    
    obj1.myName();//        
    obj2.myName();//       
    
    この例を通して、工場モデルの強みは、コードの重複を防ぐために、大量のオブジェクトを素早く作成しやすくすることができます.しかし、工場モデルには欠点があります.つまり、すべての対象者は同じ名前を持っています.全部Objectで、彼らがどの対象なのか分かりにくいです.
    コンストラクタ:
    目的別のオブジェクトを作成する方法もあります.目的別のオブジェクトの属性と方法を定義するために、ユーザー定義のコンストラクタを作成できます.コンストラクタを用いた方法は,繰り返し実用化の問題を解決するとともに,物体識別の問題を解決した.以下のとおりです
    
    //      
    function Person(name,age){
        //      ,     this,    ?      
        this.name = name;
        this.age = age;
        this.myName = function (){
            alert(this.name);
        };
    };
        var obj1 = new Person("    ",18);
        //                  ?  ,  Object     ,       
        var obj2 = new Person("    ",18);
    
  • 構築関数によって作成されたオブジェクトはそれぞれ違っています.たとえば、Personのオブジェクトを作成することができます.また、Docgのオブジェクト
  • を作成することもできます.
  • この方法によって作成されたオブジェクトを例として挙げます.例えば、Obj 1とObj 2はいずれもPersonの例
  • です.
  • は慣例によって、構造関数は大文字で始まるべきです.構造関数ではなく小文字で始まるべきです.これは強制的な要求ではないが、慣例に従うのは良好なプログラミング習慣である.
  • によって作成された新しい例は、この構成関数の作用領域と属性をこの例に割り当て、関数のthisもこのインスタンス名を指す新しいオブジェクトを作成することである.
  • 原型オブジェクト:
    作成した各関数には標準のオブジェクトが含まれています.prototype
  • prototypeは私たちのコンストラクタが作成したすべての例の原型です.だからプロトタイプまたはオブジェクトプロトタイプ、プロトタイプパターン
  • とも呼ばれます.
  • prototypeも対象で、オブジェクトのすべての機能を持つが、彼の最も重要な役割は、この構造関数の共有属性と方法
  • を含むことである.
  • プロトタイプオブジェクト内で作成された属性は、このコンストラクションによって作成されたすべてのインスタンスにアクセスできます.中身は共通の
  • です.
  • オブジェクト属性の検索方法:オブジェクトを取得するには、属性、ブラウザはまず自分で探します.見つけられないなら、そのプロトタイプのオブジェクトの中に探しに行きます.見つけられないなら、undefinedに戻ります.ここで簡単に紹介します.
  • ですので、私たちのすべての例に同じ属性が必要な場合、プロトタイプオブジェクトに書くのは良い選択です.
    //      
    function Person(name,age){
        //      ,     this,    ?      
        this.name = name;
        this.age = age;
        this.myName = function (){
            alert(this.name);
        };
    };
    Person.prototype.love = function (name){
        //      ,            
            alert("I Love"+name);
    };
        var obj1 = new Person("    ",18);
        //                  ?  ,  Object     ,       
        var obj2 = new Person("    ",18);
        obj.live("    ");
    
    構造関数と実例においては、ライブという属性は設定されていませんが、原型オブジェクトの中でこの属性を見つけて使ってもいいです.constructorprototype及び__proto__:constructor属性は、このオブジェクトを作成するためのコンストラクタへの参照、すなわちオブジェクトのインスタンスに戻るコンストラクタシンタックスを返します.object.constructor
    //        ,       
    function Fun(name){
        this.name=name;
    }
    var obj = new Fun("  ");
    //  constructor                
    console.log(obj.constructor == Fun);
    //   ture,consturctor              Fun
    
    2、オブジェクトのプロトタイプを探して、キーワードを使ってもいいです.
    //               
    function Fun(name){
        this.name=name;
    }
    //                 prototype
    var obj = new Fun("  ");
    //         __proto__                     
    console.log(Fun.prototype == obj.__proto__);
    //   true,__proto__                  
    
    ここで説明します.__proto____proto__constructorの違い:
  • prototypeは関数固有のものであり、関数のプロトタイプオブジェクトとしてのみ使用可能であり、つまり、前に加えられたのは関数名
  • でなければならない.
  • prototypeおよび__proto__属性は、オブジェクト固有のものであり、オブジェクトのプロトタイプ
  • を検索する役割を果たしている.
  • プロトタイプのオブジェクトも対象ですので、プロトタイプもあります.オブジェクトの属性や方法を使うと、自分の中で探します.1、自身の中にあれば、直接に2を使います.なかったらプロトタイプのオブジェクトの中に探します.プロトタイプのオブジェクトがあれば、3を使って、なかったらプロトタイプの中から探します.Objectオブジェクトのプロトタイプが見つかるまで、4、Objectオブジェクトのプロトタイプにはプロトタイプがありません.Objectのプロトタイプにはまだ見つかっていない場合、undefined
  • に戻ります.
    console.log(obj1.__proto__);
    //    
    console.log(obj1.__proto__.__proto__);
    //       ,    ,   null
    console.log(obj1.__proto__.name);
    //    ,   undefined
    
    注意点:属性が見つからず、undefinedに戻り、原型の対象が見つからず、nullに戻ります.
    まとめてみます
  • 構築関数を通じてオブジェクトのプロトタイプを探します.constructor
  • オブジェクトインスタンスを介してオブジェクトのプロトタイプを探します.obj.prototype
  • オブジェクトインスタンスを通じて構造関数を探します.obj.__proto__
  • 構築関数:obj.constructor
  • オブジェクトの原型:Fun
  • オブジェクト例:Fun.prototype obj.__proto__