Object.assign方法没有绑定'this'

时间:2017-06-28 18:14:17

标签: javascript object

我正在尝试将this变量绑定到新对象。

function Parent(){
    //sub-component constructors
    this.components={
        node:function(){
            this.name = 'jordan';
        }
    },
    //subcomponent methods
    this.ctrl={
        nodes:{
            type1:{
                test1:function(){
                    console.log('firing');
                    console.log(this);
                    //return undefined should return 'jordan'
                    console.log(this.name);
                },
                test2:function(){
                    console.log(this);
                }
            }
        }
    }
};
//INIT
function init(){
    //CREATE NEW 
    var parent = new Parent();
    var props = {
        "ctrl": parent.ctrl.nodes.type1
    };
    //OBJECT ASSIGN 
    var node = Object.assign(new parent.components.node(),props);
    console.log(node);
    //WHY ISN'T THE (THIS) VARIABLE SET WHEN I CALL
    node.ctrl.test1();
}
//EXECUTE INIT
document.addEventListener('DOMContentLoaded',init);

问题:当我致电this Object.assign()时,为什么node.ctrl.test1()变量不会从console.log(this.name)设置?

1 个答案:

答案 0 :(得分:0)

查看Object.assign

的定义
Object.assign(target, ...sources)

这意味着Object.assign(parent.components.node,props)props对象分配给parent.components.node,覆盖之前分配给它的函数。

调用node.ctrl.test1()的方式与您尝试调用props.ctrl.test1()的方式相同,这显然无效。

new parent.components.node()也不起作用,因为您将props分配给使用node作为构造函数返回的对象。该对象只有name属性。