为什么课程里for in可以遍历实例原型里的属性,我自己写的demo不可以

来源:7-3 -3 扩展接口 - 混合对象实现+ demo 编写

桃花开了

2020-02-20

class Axios {
      request() {
        console.log('a')
      }
      get() {
        console.log('b')
      }
      delete() {
        console.log('c')
      }
    }

    const context = new Axios();
    for (let key in context) {
      console.log(key)
    }

这里打印不出key的值。
然而在课程里extend却能遍历出key值来,这是为什么呢

function createInstance(): AxiosInstance {
  const context = new Axios()
  const instance = Axios.prototype.request.bind(context)

  extend(instance, context)

  return instance as AxiosInstance
}
export function extend <T, U>(to: T, from: U): T & U{
  for (const key in from) {
    console.log(key);
    (to as T & U)[key] = from[key] as any
  }
  return to as T & U;
}

extend转为js后是

function extend(to, from) {
    for (var key in from) {
        to[key] = from[key];
    }
    return to;
}

extend函数转化后的函数也是在遍历Axios的实例啊

写回答

1回答

ustbhuangyi

2020-02-21

因为 Axios Class 被编译生成 Function 后就可以遍历了。

0
1
桃花开了
非常感谢!
2020-02-21
共1条回复

下一代前端开发语言 TypeScript从零重构axios

课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!

2629 学习 · 877 问题

查看课程