new 和 Object.create 的区别

new 做了以下操作:

  • 创建一个全新的对象
  • 这个对象会被执行[[Prototype]](也就是__proto__)连接
  • this 会绑定到生成的新对象
  • 通过 new 创建的每个对象将最终被[[Prototype]]连接到这个函数的 prototype 对象上
  • 如果函数没有返回对象类型 Object(包含 Functoin, Array, Date, RegExg, Error),那么 new 表达式中的函数调用会自动返回这个新的对象。

Objcet.create

创建一个新对象,使用现有的对象来作为新创建对象的原型

如果第二个参数被指定且不为 undefined,则该传入对象的自有可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)将为新创建的对象添加指定的属性值和对应的属性描述符。这些属性对应于 Object.defineProperties() 的第二个参数

总结

new 会继承父类的属性和原型方法,Objcet.create 仅会继承原型方法

Last Updated:
Contributors: zhangfei