javascript - 使用通用指针从另一个子对象的子对象引用 Javascript 对象的子对象

标签 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_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/

相关文章:

javascript - 单击按钮更改 CSS 样式表

javascript - 如何在javascript中拆分值?

javascript - 解析 CSS 背景图像和选择器

javascript - Bootstrap tabbable 和 popover 之间的冲突

javascript - 有没有更好的方法将 const 函数添加到 javascript 对象?

javascript - 将数值与对象相加

作为数组的 JavaScript 对象

javascript - 如何过滤具有多个层的对象

javascript - 向 AngularJS 中的动态嵌套列表添加新输入

javascript - 如何在 Javascript 中比较密码