下面是为模块创建名称空间的脚本,在parent = parent[parts[i]]之后,我不明白它是如何工作的,它如何创建嵌套? 有什么建议么?

var MYAPP = MYAPP || {};
MYAPP.namespace = function (ns_string) {
    var parts = ns_string.split('.'),
        parent = MYAPP,
        i;

    if (parts[0] === "MYAPP") {
        parts = parts.slice(1);
    }
    for (i = 0; i < parts.length; i += 1) {
        // create property if doesn't exist
        if (typeof parent[parts[i]] === "undefined") {
            parent[parts[i]] = {};
        }
        parent = parent[parts[i]];
    }
    return parent;
};

var module2 = MYAPP.namespace('MYAPP.modules.module2');
module2 === MYAPP.modules.module2; // true

===============>>#1 票数:0

简而言之,函数将函数参数(完全限定的名称)分成其组成部分(以点分隔)。 然后,它说:“此对象是否作为当前父对象的属性存在?否,将其创建为父对象的属性,并使其成为下一个父对象。是的,将现有对象设置为父对象,然后重复每个名字。” 之后,它将返回已分配给var module2的整个对象。

===============>>#2 票数:0

这是您不了解的部分:

for (i = 0; i < parts.length; i += 1) {
  // create property if doesn't exist
  if (typeof parent[parts[i]] === "undefined") {
    parent[parts[i]] = {};
  }
  parent = parent[parts[i]];
}


So parent = MYAPP and parts = ['modules', 'module2'];

在循环中完成以下操作:

**i = 0** <br />
typeof parent[parts[0]] equals 'undefined' since MYAPP['modules] doesn't exist <br />
MYAPP['modules'] = {} (MYAPP is parent here and parts[0] equals 'modules') <br />
parent = MYAPP['modules'] <br />
**i = 1** <br />
typeof parent[parts[1]] equals 'undefined' since MYAPP['modules]['module2'] doesn't exist <br />
MYAPP['modules']['module2'] = {} <br />
parent = MYAPP['modules']['module2'] <br />
exists the loop since 1 < 1 is false <br />
returns parent, which is MYAPP['modules']['module2'] <br />

  ask by Aleksey Savitsky translate from so

未解决问题?本站智能推荐:

2回复

如何在Javascript名称空间脚本中创建函数数组

我正在尝试在脚本中使用一系列函数。 我使用命名空间对象,当我使用此数组时,我的所有函数都是undefined 。 如何使用良好的函数引用创建此数组以处理processAllFunction ? 看我的代码:
2回复

在javascript中创建名称空间

您知道如何在javascript中为构造函数对象创建名称吗? 我有个小提琴,请看一下。 http://jsfiddle.net/m8jLoon9/2/ 例如
4回复

为JavaScript库创建名称空间

我正在尝试创建一个带有函数foo.bar的库foo.js ,我可以这样调用它: 我正在尝试像这样编写该库: 这是我在其他地方看到的一种模式,尽管我不能说我确切地了解发生了什么。 当我尝试使用此我听说foo当我尝试定义没有定义foo.bar 。 我想念什么?
2回复

JavaScript名称空间

在JavaScript中,从一个命名空间访问另一个函数或属性的最佳方法是哪种? 例:
1回复

Javascript名称空间-函数之间的变量交换

这个问题已经在这里有了答案: JavaScript是按引用传递还是按值传递语言? 30个答案 我知道我在使用命名空间时犯了严重错误。 我在网络/谷歌搜索中研究了一吨后发布了这个问题。 仍然找不到我在做什么错。 你能帮我吗? 这就是我所拥有的 使用Ja
5回复

本地JavaScript函数是否必须有名称空间?

我同意使用名称空间对于JavaScript库至关重要,但是驻留在script标签中HTML文件中的那些函数呢? 基本上,这些是“本地”功能,从不与任何其他页面共享。 你们还在为那些使用名称空间吗? 如果是这样,您是否使用与共享自定义库相同的名称空间?
3回复

javascript名称空间调用其他函数方法

我尝试更改某种方法来将方法调用到名称空间中。 调用父方法(我认为这不可能) 创建和调用继承函数 在另一个方法内部调用(主要是jquery onReady事件函数)(this.MyFunction()不起作用) 我将文件中的每个名称空间都拆分了(想保持这种方式)
3回复

从jquery中调用javascript名称空间函数

我想用此模块中数组的值填充jquery ui模式对话框: 当这样调用时,它可以正常工作: 但是,当在jquery语句中使用由jquery click事件生成的参数调用模块函数时,它不起作用: 这里需要更改什么?
2回复

Javascript-从名称空间回调函数问题?

这段代码给了我TypeError: ["displayDateFromController"] is not a function错误。 什么可能是根本原因,也可能是此问题的解决方案。 为什么dateController无法确定displayDateFromController的功能。
1回复

Javascript:在名称空间中调用函数

file1.js file2.js Namespace.addNewFunc.callMe()?? 不完全确定如何使用名称空间到达callMe()的内容。