js 手写Object.create

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))
posted @ 2022-06-13 16:48  IslandZzzz  阅读(138)  评论(0编辑  收藏  举报