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