原生js实现Object.assign和Object.create

Object.assign(target,…sources)

  • Object.assign(target,…source)方法用于将所有可枚举的属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
    function myassign(target, source) {
    
    
      if (arguments.length < 2) {
    
    
        return target
      }
      let sources = [...arguments].slice(1)
      sources.forEach(element => {
    
    
        for (let i in element) {
    
    
          if (Object.prototype.hasOwnProperty.call(element, i)) {
    
    
            target[i] = element[i]
          }
        }
      })
      return target
    }

Object.create(proto,[propertiesObject])

  • Object.create()方法使用指定的原型对象和其属性创建了一个新的对象。
  • Object.create(proto,[propertiesObject])
  • Object.create方法创建一个空对象,然后将空对象的__proto__ = proto,如果还有propertiesObject参数的话,就进行object.assign类似的操作,把属性赋上去。
    function mycreate(proto) {
    
    
      let obj = {
    
    }
      if (arguments.length == 0) {
    
    
        return obj
      } else {
    
    
        obj.__proto__ = proto
        //传入参数中的对象会进行覆盖obj内的属性
        if (arguments.length > 1) {
    
    
          let args = [...arguments].slice(1)
          args.forEach(element => {
    
    
            for (let i in element) {
    
    
              if (Object.prototype.hasOwnProperty.call(element, i)) {
    
    
                obj[i] = element[i]
              }
            }
          })
        }
      }
      return obj
    }

猜你喜欢

转载自blog.csdn.net/qq_42535651/article/details/104366420