引用Javascript对象';来自另一个孩子的孩子';使用泛型指针初始化子对象
请检查以下对象结构:引用Javascript对象';来自另一个孩子的孩子';使用泛型指针初始化子对象,javascript,javascript-objects,Javascript,Javascript Objects,请检查以下对象结构: var obj_parent = { obj_child : { obj_child_var : 15, fnc : function() { let self = this; alert('Called : obj_parent>fnc() | obj_child_var : '+self.obj_child_var); obj_parent.obj_fn
var obj_parent = {
obj_child : {
obj_child_var : 15,
fnc : function() {
let self = this;
alert('Called : obj_parent>fnc() | obj_child_var : '+self.obj_child_var);
obj_parent.obj_fnc();
}
},
obj_fnc : function() {
alert('Called : obj_parent>obj_fnc();');
}
};
$(function() {
obj_parent.obj_child.fnc();
});
,只需单击“单击此处”按钮进行测试
在第7行,obj_parent.obj_child.fnc()正在调用函数obj_parent.obj_fnc(),该函数来自其父对象的父对象
如果它不是父对象的父对象,我可以使用“this”来访问函数(比如在第5行和第6行中访问“obj#u child#u var”)
这里的问题是,如果我必须重命名“obj_parent”,我将不得不在其中的任何地方重命名它
重构代码的最佳方式是什么,其中的任何子级或多个子级都可以从对象的上根访问任何其他子级,而无需使用对象的直接名称(“obj_parent”),但更多的是一种通用方式
比如:让self_root=指向“obj_父对象”的指针;
在每一层中,在“obj_父级”中的任何地方,都使用这个self_根而不是“obj_父级”
在这里,我希望将整个代码压缩在内部:obj_parent={..Everything..}
并且不想将任何“obj_parent”代码放在它之外,比如使用:
obj_parent.prototype.**=***
对于通过仅在obj_parent={…}内部重新构造代码来实现这一点的最佳方法,是否有任何建议
简言之,我在obj_parent.obj_child.fnc()中查找类似以下内容:
这样我就不必在obj_parent.obj_fnc()中重命名“obj_parent”;如果根“obj_parent”被重命名
这里的问题是,如果我必须重命名“obj_parent”,我将不得不在其中的任何地方重命名它
我会改用IIFE,这样您就可以在IIFE的作用域内为对象指定您想要的任何名称,并返回对象-然后,您可以将外部变量名称从obj_parent
重命名为您想要的任何名称,而不会出现问题:
const parentVariableName=(()=>{
常量对象父对象={
obj_儿童:{
obj_child_变量:15,
fnc:函数(){
让自我=这个;
警报('Called:obj_parent>fnc()| obj_child_var:'+self.obj_child_var');
obj_parent.obj_fnc();
}
},
obj_fnc:函数(){
警报('Called:obj_parent>obj_fnc();');
}
};
返回obj_父对象;
})();
parentVariableName.obj_child.fnc()代码>
这里的问题是,如果我必须重命名“obj_parent”,我将不得不在其中的任何地方重命名它
我会改用IIFE,这样您就可以在IIFE的作用域内为对象指定您想要的任何名称,并返回对象-然后,您可以将外部变量名称从obj_parent
重命名为您想要的任何名称,而不会出现问题:
const parentVariableName=(()=>{
常量对象父对象={
obj_儿童:{
obj_child_变量:15,
fnc:函数(){
让自我=这个;
警报('Called:obj_parent>fnc()| obj_child_var:'+self.obj_child_var');
obj_parent.obj_fnc();
}
},
obj_fnc:函数(){
警报('Called:obj_parent>obj_fnc();');
}
};
返回obj_父对象;
})();
parentVariableName.obj_child.fnc()代码>根据您的使用情况,您可以将子函数重写为箭头函数,使作用域成为外部上下文
根据使用情况,您可以将子函数重写为箭头函数,使作用域成为外部上下文
...
fnc : function() {
let root_obj_pointer = this.parent;// Points to 'obj_parent';
root_obj_pointer.obj_fnc();// Instead of obj_parent.obj_fnc();
}
...
var parent = {
child: {
x: 15,
fnc: () => {
let y = parent.child.x
alert('child.fnc(): ' + y)
parent.fnc(y)
}
},
fnc: function(y) {
alert('parent.fnc(): ' + y)
}
};
function btn_clicked() {
parent.child.fnc()
}