javascript - 从 'namespace' 字符串构建对象层次结构

标签 javascript string enumeration

我正在尝试编写一个函数,该函数接受表示命名空间的字符串(例如“MyCompany.UI.LoginPage”),并将命名空间的每个段定义为对象(如果它尚不存在)。例如,如果“MyCompany.UI.LoginPage”不是对象,它将评估以下内容:

MyCompany = {};
MyCompany.UI = {};
MyCompany.UI.LoginPage = {};

我想通过枚举“命名空间”(字符串)参数的每个字符并在枚举达到句点字符时定义每个对象来实现此目的。

如何在 JavaScript 中枚举字符串的字符?

最佳答案

您可以使用 String.prototype.charAt 直接通过索引访问字符串的字符。方法:

var str = "foo";
for (var i = 0; i < str.length; i++) {
  alert(str.charAt(i));
}

但我不认为你想逐个字符地遍历你的命名空间字符串,你可以使用 String.prototype.split方法,使用点 (.) 字符作为分隔符来获取包含命名空间级别的数组,例如:

var levels = "MyCompany.UI.LoginPage".split('.');
// levels is an array: ["MyCompany", "UI", "LoginPage"]

但是我认为你的问题更进一步,我会给你一个更高级的起点,我做了一个递归函数,它可以让你准确地做你想做的事情,初始化几个嵌套的使用字符串的对象级别:

用法:

initializeNS('MyCompany.UI.LoginPage');
// that will create a MyCompany global object

// you can use it on an object to avoid globals also
var topLevel = {};
initializeNS('Foo.Bar.Baz', topLevel);

// or
var One = initializeNS('Two.Three.Four', {});

实现:

function initializeNS(ns, obj) {
  var global = (function () { return this;})(), // reference to the global object
      levels = ns.split('.'), first = levels.shift();
  obj = obj || global; //if no object argument supplied declare a global property
  obj[first] = obj[first] || {}; // initialize the "level"
  if (levels.length) { // recursion condition
    initializeNS(levels.join('.'), obj[first]);
  }
  return obj[first]; // return a reference to the top level object
}

您必须改进此功能,例如您需要清理字符串...

关于javascript - 从 'namespace' 字符串构建对象层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308783/

相关文章:

java - 举一个在regex java中使用cyirillic的例子

javascript - 如何修改 Zingchart 中的 'nodes' 行为

javascript - ng-react 比 ng-repeat 慢得多(不推荐访问属性 'nodeType' 错误)

javascript - jquery 从 1.7 迁移到 1.10.1

haskell - .. 在哪里定义?

matlab - 是否可以使用枚举作为 MATLAB 矢量或 map 的下标?

c - Objective-C/C 给出枚举默认值

javascript - 撤消 preventDefault() 或以编程方式禁用链接集合的更好方法

c++ - 无法在 std::unordered_set<const char *> 中找到转换为 const char * 的 std::string

c++ - 尝试将字符串添加到结构时程序中断