JS中newとObject.creat()の違い

1982 ワード

new操作子
まずnew操作子を見に行きます.
function Animal(){}
var animal = new Animal();
プロトタイプチェーンを熟知すれば、newオペレータが実行時にアニマル.プロトタイプに値を付与することが分かります.
Object.create
まずObject.createの文法を見ます.
Object.create(proto, [ propertiesObject ]) 
その中:
  • protoは原型オブジェクト
  • である.
  • propertiesObjectは、属性の構成
  • である.
    function Animal(name){
        this.name = name;
    }
    var animal = new Animal("test");
    
    var createAnimal1 = Object.create(Animal.prototype);
    var createAnimal2 = Object.create(animal);
    var createAnimal3 = Object.create(null);
    
    console.log(createAnimal1.name) //     undefined
    console.log(createAnimal2.name) //    test
    console.log(createAnimal3) //     {}
    つまり、オブジェクトの原型オブジェクトを任意に指定することができます.
    まとめ:
  • newオペレータは、そのようなコンストラクタのプロトタイプで指定されたプロトタイプのオブジェクトを新しいオブジェクトの「Prottype」
  • に割り当てます.
  • Object.creatは、パラメータprotoが指定したプロトタイプオブジェクトを新しいオブジェクトの[Prottype]に割り当てます.
  • パラメータがnullであれば、Object.creatは空のオブジェクトを作成します.特に、Object.creat(null)とnew Object()の違いを指摘する必要があります.どちらも空のオブジェクトを作成しますが、newが作成した空のオブジェクトはObjectのプロトタイプのオブジェクトをバインドしますが、Object.create(null)の空のオブジェクトは属性がありません.