Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Object.assign方法不绑定';这';_Javascript_Object - Fatal编程技术网

Javascript Object.assign方法不绑定';这';

Javascript Object.assign方法不绑定';这';,javascript,object,Javascript,Object,我正在尝试将这个变量绑定到一个新对象 function Parent(){ //sub-component constructors this.components={ node:function(){ this.name = 'jordan'; } }, //subcomponent methods this.ctrl={ nodes:{ type1:{

我正在尝试将
这个
变量绑定到一个新对象

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

问题:当我调用
节点.ctrl.test1()
哪个
控制台.log(this.name)
时,为什么不从
对象.assign()设置
这个
变量呢?

看看
对象.assign的定义:

Object.assign(target, ...sources)

这意味着
Object.assign(parent.components.node,props)
props
对象分配给
parent.components.node
,覆盖先前分配给它的功能

调用
node.ctrl.test1()
的工作方式与尝试调用
props.ctrl.test1()
的工作方式相同,这显然不起作用


newparent.components.node()
也不起作用,因为您将把
props
分配给使用
node
作为构造函数返回的对象。该对象将只有一个
名称
属性。

查看
对象的定义。分配

Object.assign(target, ...sources)

这意味着
Object.assign(parent.components.node,props)
props
对象分配给
parent.components.node
,覆盖先前分配给它的功能

调用
node.ctrl.test1()
的工作方式与尝试调用
props.ctrl.test1()
的工作方式相同,这显然不起作用


newparent.components.node()
也不起作用,因为您将把
props
分配给使用
node
作为构造函数返回的对象。该对象将只有一个
名称
属性。

是的,你的权利,我不想实例化一个新对象,只是在当前对象上操作。我用
new
更新了我的代码,所以它实例化了一个新实例,使
parent.components.node
成为一个构造函数,仍然是在调用
node.ctrl.test1()时
它仍然记录
未定义的
console.log(this.name)
是的,你的权利我不想实例化一个新对象,只是在当前对象上操作。我用
new
更新了我的代码,所以它实例化了一个新实例,使
parent.components.node
成为一个构造函数,当我调用
node.ctrl.test1()
时,它仍然为
console.log(this.name)
parent.components.node
记录
未定义的
。你真的想分配给那个对象吗?你希望哪个
这个
被设置成什么?不,
Object.assign
不绑定任何东西。我将它用作
构造函数
到一个子对象(子组件),该子对象只相对于它的
父对象
对象。要将其用作构造函数,您需要
新建
,而不是
对象。assign
@Bergi是的,我刚刚更新了代码,看一看,仍然记录未定义的父组件节点是一个函数。你真的想分配给那个对象吗?你希望哪个
这个
被设置成什么?不,
Object.assign
不绑定任何东西。我将它用作
构造函数
到一个子对象(子组件),该子对象只相对于它的
父对象
对象。要将其用作构造函数,您需要
新建
,而不是
对象。assign
@Bergi是的,我刚刚更新了代码,看一看,仍在记录未定义的