Object.create, 即生成一个新对象,同时将参数作为新对象的原型链
通过new将构造函数的原型设置到实例对象的原型链上,完成create的功能
基于new方法的方式有个问题,new作用的构造函数必须返回一个引用类型,而我们通常用Object.create(null)来创建一个原型链为空的对象,因为null不是引用类型,所以new会默认给一个对象类型设置为原型链,和预期结果有出入
因此,在这种情况下,这个方式就有问题。
基于这个角度,推荐使用第二种方式
function O() { }
Object.prototype._create = (target) => {
O.prototype = target
return new O()
}
Object.prototype._create2 = (target) => {
const ret = {}
ret.__proto__ = target
return ret
}
console.log(Object._create({ a: 1 }))
console.log(Object._create2({ a: 1 }))
console.log(Object._create(null))
console.log(Object._create2(null))