オブジェクトの字面量と立体関数によってオブジェクトの違いを作成します.

1960 ワード

オブジェクトを文字どおりに作成します.
私たちは直接にオブジェクトを作成する時に機能を追加できます.

var person = {
    name : 'zqq',
    age : 28,
    say : function(){
        return "hello";
    }
};
または
まず「空のオブジェクト」を定義し、属性と方法を追加します.

var person = {};
person.name = 'zqq';
person.age = 28;
person.say = function(){
    return "hello";
}
上の「空の相手」はなぜダブルクォーテーションをしましたか?これは一種の略称にすぎない.jsには本物の空の対象が存在しないので、この点を理解することが大切です.時に最も簡単な{}オブジェクトであっても、Object.prototypeから引き継ぐ属性と方法が含まれます.私たちが挙げた「空のオブジェクト」は、このオブジェクトに固有の属性がないというだけで、それが継承された属性があるかどうかは考えられません.
オブジェクトをコンストラクタで作成します.
var person =  new Object();//      ,()    
person.name = 'zqq';
person.age = 28;
オブジェクトの字面量vsコンストラクターを作成し、オブジェクトのコントラストを作成します.
字面量のメリット:
  • コードの量がもっと少なくて、読みやすいです.
  • オブジェクトは、特定のクラスから派生する必要はなく、単純な可変のリストであることを強調することができる.
  • オブジェクトの字面量は、解析時に最適化され得るので、「スコープ解析」は必要ない.私たちが同じ名前のコンストラクタObject()を作成した可能性があるので、私たちがObject()を呼び出すと、解像器は作用ドメインチェーンに沿って現在の作用領域から検索を開始する必要があります.現在の作用領域でObject()という関数を見つけたら実行します.見つけられなかったら、引き続き作用ドメインチェーンに沿って上に写真を撮ります.コンストラクタ
  • Object()構造関数はパラメータを受信し、このパラメータによってオブジェクトインスタンスの作成プロセスを別の内蔵構造関数に委託し、他のオブジェクトインスタンスに戻ることができます.これはしばしばあなたが望むものではありません.
  • 次のコード例では、new Object()に異なるパラメータ(数字、文字列、ブール値)を入力し、最終的に得られたオブジェクトは異なる構造関数で生成される.
    //    
    var o = new Object();
    console.log(o.constructor === Object); // true
    
    //     
    var o = new Object(1);
    console.log(o.constructor === Number); // true
    console.log(o.toFixed(2)); // "1.00"
    
    //      
    var o = new Object("I am a string");
    console.log(o.constructor === String); // true
    //       substring()  ,       
    console.log(typeof o.substring); // "function"
    
    //      
    var o = new Object(true);
    console.log(o.constructor === Boolean); // true
    
    Object()構造関数のこの特性は,特にパラメータが不確定な場合,いくつかの予期しない結果をもたらす.
    以上のように、対象の字面量をできるだけ使ってオブジェクトを作成します.
    参考資料:https://github.com/TooBug/jav...http://lichking1201.github.io...