首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从“namespace”字符串生成对象层次结构

从“namespace”字符串生成对象层次结构
EN

Stack Overflow用户
提问于 2010-02-22 12:27:10
回答 2查看 1.3K关注 0票数 2

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

代码语言:javascript
复制
MyCompany = {};
MyCompany.UI = {};
MyCompany.UI.LoginPage = {};

我想通过枚举"namespace“(字符串)参数的每个字符,并在枚举达到句点字符时定义每个对象来实现这一点。

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

EN

回答 2

Stack Overflow用户

发布于 2010-02-22 12:44:26

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

代码语言:javascript
复制
var str = "foo";
for (var i = 0; i < str.length; i++) {
  alert(str.charAt(i));
}

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

代码语言:javascript
复制
var levels = "MyCompany.UI.LoginPage".split('.');
// levels is an array: ["MyCompany", "UI", "LoginPage"]

但我认为你的问题更进一步,我将给你一个更高级的起点,我做了一个递归函数,允许你做你想做的事情,使用一个字符串初始化几个嵌套的对象级别:

使用:

代码语言:javascript
复制
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', {});

Implementation:

代码语言:javascript
复制
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
}

您必须改进此函数,例如,您将需要清理字符串...

票数 4
EN

Stack Overflow用户

发布于 2010-02-22 12:31:53

使用以下代码将字符串转换为字符数组:

代码语言:javascript
复制
var $letterArray = [];

for (var $i = 1; $i <= $yourString.length; $i++)
{
    $letterArray[$i] = $yourStringtring.substring(($i - 1), $i);
}

然后,您可以枚举字符串数组$letterArrary中的每个字符

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2308783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档