如何使Object.assign工作?

时间:2017-05-26 16:12:26

标签: javascript node.js ecmascript-6 assign

背景

我试图通过传递具有附加功能的新对象来扩展旧对象的功能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对象执行失败,即使它有机器printLogtest方法:

Object {printLog: function, test: function}

问题

如何修复代码,以便test函数按预期工作?

2 个答案:

答案 0 :(得分:2)

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

test

答案 1 :(得分:0)

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

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