老师,为什么我这样创建混合实例是不对的?

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

前端渣渣灰

2019-06-27

class axios {

    request() {

        console.log('request')

    }

    a() {

        console.log('a')

    }

    b() {

        console.log('b')

    }

}

function createInstance() {

    let ctx = new axios()

    let instance= axios.prototype.request.bind(ctx)

    extend(instance, ctx)

    return instance

}

function extend(to, from) {

    for (var key in from) {

        to[key] = from[key];

    }

    return to;

}

let testInstance = createInstance()

testInstance()

testInstance.a()

Uncaught TypeError: testInstance.a is not a function




写回答

1回答

躁动的胸大肌

2019-06-27

因为咱们的项目配置的编译目标是es5, es5时for-in能获取原型的属性,
es6不行,你这段代码直接执行是es6环境,可以tsc --target es5 | es6来测试

1
2
前端渣渣灰
你好,我还想问一下为什么我用babel转的es5也不行 ? 他把属性挂到defineProperty上面去了, 而用tsc是转化成prototype就可以
2019-06-28
共2条回复

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

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

2629 学习 · 877 问题

查看课程