new Object()和Object.create()的区别

134 阅读1分钟

Object.create()

创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。

语法 Object.create(proto, [propertiesObject])

参数

proto传递一个现在有的对象,即新对象的原型对象(新创建的对象_proto_属性指向现有属性)。 Object.create({name:'张三'});

image.png

Object.create(null);

image.png

[propertiesObject] : 可选,给新对象添加新属性以及描述器。如果没有指定即创建一个{},有原型也有继承Object.prototype上的方法。

返回值

一个新对象,带着指定的原型对象和属性。

new Object()

new创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

  • 创建一个空的对象(即{});
  • 链接该对象(即设置该对象的构造函数)到另一个对象;
  • 将步骤1新创建的对象作为this的上下文;
  • 如果该函数没有返回对象,则返回this;
  • new会创建一个新对象,并且这个新对象继承构造函数的prototype,也就是说创建的实例的proto指向构造函数的prototype;
  • new Object()会创建一个实例,该实例的proto指向Object的prototype;

new Object();

image.png

new Object({name:'张三'});

image.png

区别

  • new Object()继承内置对象Object,而Object.create()则是继承指定对象
  • 可以通过Object.create(null) 创建一个干净的对象,也就是没有原型,而 new Object()创建的对象是 Object的实例,原型永远指向Object.prototype