请检查以下对象结构:
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();
});
Test code at Codepen ,只需单击“单击此处”按钮即可进行测试。
在第 7 行,obj_parent.obj_child.fnc() 正在调用来自其父级的父级的函数 obj_parent.obj_fnc()。
如果它不是父级的父级,我可以使用“this”来访问(如第#5、#6行中访问“obj_child_var”)该函数。
这里的问题是,如果我必须重命名“obj_parent”,我将必须在其中的所有位置重命名它。
重构代码的最佳方法是什么,其中任何子级或多个子级都可以从对象的顶部根访问任何其他子级,而无需使用它的直接名称('obj_parent'),而是更多的通用方式。
类似:让 self_root = 指向“obj_parent”的指针; 并在每个级别、“obj_parent”内的任何地方使用 self_root 而不是“obj_parent”;
这里我想保持整个代码紧凑:obj_parent = {..Everything..}
并且不想将“obj_parent”的任何代码放在其外部,例如使用:
obj_parent.prototype.* * * = * * *;
是否有关于通过仅在 obj_parent= {...} 内部重组代码来实现此目的的最佳方法的建议?
简而言之,我正在 obj_parent.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();
}
...
这样我就不必重命名 obj_parent.obj_fnc() 中的“obj_parent”;如果根“obj_parent”被重命名。
最佳答案
Problem here is, if I have to rename 'obj_parent', I will have to rename it everywhere inside it.
我会使用 IIFE,这样您就可以在 IIFE 范围内为对象指定任何您想要的名称,并返回该对象 - 然后,您可以将外部变量名称从 obj_parent
重命名为无论你想要什么,没有问题:
const parentVariableName = (() => {
const 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();');
}
};
return obj_parent;
})();
parentVariableName.obj_child.fnc();
关于javascript - 使用通用指针从另一个子对象的子对象引用 Javascript 对象的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141021/