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 仅会继承原型方法