如何让 Object.assign 工作?

How to make Object.assign work?

背景

我正在尝试通过 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 函数按预期运行?

编辑:将您的代码更改为:

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

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

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


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

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

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();