背景

我正在尝试通过Object.assign通过传递具有附加功能的新对象来扩展旧对象的功能。



    const oldObj = () => {
        const printLog = () => console.log("hello");
        return {printLog};
    };

    const newObj = () => {
        const test = () => {
            printLog(); //fails here!
            console.log("world");
        };
        return {test};
    };

    const mix = Object.assign(oldObj(), newObj());

    mix.printLog();
    mix.test();





问题

我的mix对象执行失败,即使它具有bot printLogtest方法:

Object {printLog: function, test: function}




如何修复我的代码,以使test函数能够按预期工作?

最佳答案

为了访问printLog,您必须通过this访问它。但是,您的函数test不能是箭头函数,因为箭头函数使用定义它们的上下文的this上下文,因此要获得所需的结果,请将printLog()更改为this.printLog()并切换从箭头功能到常规功能:



const oldObj = () => {
    const printLog = () => console.log("hello");
    return {printLog};
};

const newObj = () => {
    const test = function() {
        this.printLog(); //fails here!
        console.log("world");
    };
    return {test};
};

const mix = Object.assign(oldObj(), newObj());

mix.printLog();
mix.test();

09-29 23:12