请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

extend实现

// export function extend<T, U>(to: T, from: U): T & U {
//
//   for (const key in from) {
//     (to as T & U)[key] = from[key] as any
//   }
//
//   return to as T & U
// }

export function extend<T, U>(to: T, from: U): T & U {
  function copy(instance: Record<string, any>) {
    Object.getOwnPropertyNames(instance).forEach((key) => {
      Object.assign(to, {
        [key]: instance[key]
      })
    })

    const proto = Reflect.getPrototypeOf(instance)

    if (proto !== null) {
      copy(proto)
    }
  }

  copy(from)

  return to as T & U
}

es6规定原型上的方法是不可枚举的,这里之所以可以实现是ts编译器的编译目标是es5有关吧?尝试了下es6实现的extend方法,使用es6实现extend会不会更好点,这样即使编译目标是es6这段代码也是可以正常运行的。

正在回答

1回答

ustbhuangyi 2020-08-18 11:01:13

也可以呀

0 回复 有任何疑惑可以回复我~
  • MirorXu #1
    老师,我的extend方法也有问题,最终的axios函数对象没有get、post方法, for in 无法遍历context(即 Axios实例)的原型方法,因为不可枚举。 extend的实现感觉不是很好呢
    回复 有任何疑惑可以回复我~ 2024-06-18 18:41:16
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号