JS实现Object.create、Object.assign

Object.create()

可以接受两个参数

第一个参数是作为创建对象的原型,第二个参数是要创建的对象,默认空对象

//简略版
function myCreate(obj){
    // 新声明一个函数
    function C(){};
    // 将函数的原型指向obj
    C.prototype = obj;
    // 返回这个函数的实例化对象
    return new C()
}

Object.assign()

Object.assign()用于将对象自身所有的可枚举属性从一个或者多个源对象上复制到目标对象

不查找原型链

for..in的话就配合hasOwnProperty

Object.prototype.myassgin=function(target,...source){
    if(!target){
        throw `${target} is null`
    }
    else{
        var ret=Object(target)

        source.forEach((v,i)=>{
            if(v!==null){
                for( let k in v){
                    if(v.hasOwnProperty(k)){
                        ret[k]=v[k]
                    }
                }
            }
        })

    }

    return ret
}


let a={a:10}
let b={b:2}
let c={c:3}

let d=Object.myassgin(a,b,c)
console.log(d); //{a:10,b:2,c:3}