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是的,我刚刚更新了代码,看一看,仍在记录未定义的