需要 JavaScript 嵌套命名空间生成代码解释

标签 javascript namespaces design-patterns

谁能解释一下下面这个是如何工作的?

var MYAPP = {};
MYAPP.namespace = function(name){
    var parts = name.split('.');
    var current = MYAPP;
    for (var i in parts) {
        if (!current[parts[i]]) {
            current[parts[i]] = {};
        }
        // shouldn't this line override the MYAPP object with all it's properties?
        current = current[parts[i]];
    }
}

最佳答案

current 首先被分配一个 referenceMYAPP,之后,在循环中,对于来自 的数组的每个部分name.split 它随后被分配一个对 MYAPP 新创建的属性的引用。所以没有任何内容被覆盖,因为它都是引用

例如,如果您执行 MYAPP.namespace(foo.bar),就会发生这种情况:

  • 首先:current指向MYAPP
  • 现在进入循环。如果 current/*is ref to MYAPP*/.foo 不存在,则创建 MYAPP.foo
  • current指向MYAPP.foo
  • 如果 current/* 现在引用 MYAPP.foo*/.bar 不存在则创建它
  • 最后 MYAPP 包含:
    • MYAPP.foo
    • MYAPP.foo.bar
  • 如果您想使用对象字面量将相同的内容分配给 MYAPP 作为 MYAPP.namespace(foo.bar),您可以这样写
    • var MYAPP = { foo: { bar: {} }

关于需要 JavaScript 嵌套命名空间生成代码解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328927/

相关文章:

java - 抽象工厂作为一种策略?

objective-c - ReactiveCocoa 中的缓存失效

javascript - Fabric.js - 带有免费矩形边界框的文本,如 Google 幻灯片

javascript - 如何使用moment js查找两个时区之间的时差

javascript - Rhino 'document' 未定义

javascript - JavaScript 中的哈希数组

xslt - 转换为 SVG 文件时的 XSL 命名空间问题

design-patterns - 设计模式的类别

Symfony2 访问自定义类

PHP 命名空间和 "use"