【问题标题】:javascript access chain with nested object literals带有嵌套对象文字的 javascript 访问链
【发布时间】:2023-04-01 08:09:01
【问题描述】:

我正在做一个项目,我有一个根对象字面量,其中存储了其他部分使用的常量和枚举等内容,以及用于分隔不同功能的嵌套对象字面量。 像这样的:

root = {
    enum : {
        FIRSTVAL : 0,
        SECONDVAL : 1,
        THIRDVAL : 2,
    },
    CONST : 0xFFE8,
}

root.display = {
    renderer : function() {
        // do something...
        do_some_fun(enum.FIRSTVAL);
    }
    // other functions
}

root.engine = {
    processor = function() {
        // do some stuff
        run_calculations(CONST);
    }
    // some other functions
}

基本上,我使用顶级对象字面量作为命名空间,而其他对象/函数分布在多个文件中。唯一的问题是根对象的属性不能被根的子对象访问,例如 root.display.renderer 中的 enum 或 root.engine.processer 中的 CONST。如果 root 是一个函数对象,这将很容易通过原型链来完成,但我希望 root 对象是静态的并且仅用作容器。

在 Javascript 中实现这种结构的最佳方法是什么?有没有更好的结构可以实现项目封装的相同目标?

编辑:对不起,我没有正确地提到继承。我知道可以直接访问 root 的属性(通过 root.whatever)。我想知道是否可以将对 root 的引用隐含在 root 的子级中;除非使用直接引用是 Javascript 的标准做法?

【问题讨论】:

  • 为什么不能像 root.enumroot.CONST 等那样从子级访问根属性?
  • could child access any from root ,我认为你应该包括孩子的例子。
  • 这似乎和继承无关。
  • “如果 root 是一个函数对象,这将很容易通过原型链完成”。然后就这样做。但我想你会发现这并不容易(并不是说这样很难)。
  • 另一种方法是使用闭包,但这对于这样的事情确实不是一个好主意,因为它只是用执行上下文中的变量对象替换您现在使用的普通对象(使用所有额外的行李)。

标签: javascript oop namespaces


【解决方案1】:

你的意思是这样的?? (“var”不是必需的,但鼓励使用。)

var root = {
    enum : {
    FIRSTVAL : 0,
    SECONDVAL : 1,
    THIRDVAL : 2,
    },
    CONST : 0xFFE8,
}

root.display = {
    renderer : function() {
        console.log(root.enum.FIRSTVAL);
    }
}

root.engine = {
    processor : function() {
        console.log(root.CONST);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2018-07-14
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多