Object.create() 和 new Object()、{} 的区别

Object.create()

Object.create()方法规范化了原型式继承。这个方法接收两个参数:Object.create(obj,propertiesObject) ;

obj:一个对象,用作新对象的原型对象

propertiesObject:(可选的)为新对象定义额外属性的对象。该参数与 Object.defineProperties() 方法的第二个参数格式相同:每个属性都是通过自己的描述符定义的。以这种方式指定的任何属性都会覆盖原型对象上的同名属性。

var cat = {
    name : 'Tom',
    color : 'black'
};
var test1 = Object.create(cat,{
    name : {
        value : 'Jack'
    },
    age : {
        value : 5
    }
});
console.log(test1.name);  //Jack
console.log(test1.color); //black
console.log(test1.age);   //5

new Object() 和 {}

var obj = { name :'Jack' };

它其实等同于下面这样:

var obj = new Object();
obj.name = 'Jack' ;      

{} 是以对象字面量的形式创建了一个对象,new Object() 是通过 Object 构造函数创建了一个对象

上面两种方法从底层实现上是没有区别的。

1.在传入一个参数的情况下, Object.create() 与 new Object()方法的行为相同。 

var cat = {
    name : 'Tom'
};
var test1 = Object.create(cat);
console.log(test1.name); //Tom

var test2 = new Object(cat);
console.log(test2.name); //Tom

2.Object.create() 与 new Object() 的区别在于,创建的对象的原型对象不同。

var cat = {
    name : 'Tom'
};
var test1 = Object.create(cat);
var test2 = new Object(cat);
console.log(test1.__proto__ == cat);               //true
console.log(test2.__proto__ == Object.prototype);  //true
console.log( cat.__proto__  == Object.prototype);  //true

3.怎么使 Object.create() 等同于 new Object() 呢?

var test1 = Object.create(Object.prototype);
var test2 = new Object();
console.log(test1.__proto__ == Object.prototype);  //true
console.log(test2.__proto__ == Object.prototype);  //true
原文地址:https://www.cnblogs.com/3yleaves/p/9613505.html