0

我在网上搜索有关该jquery.namespace过程的信息。最后我在这个示例脚本的堆栈溢出中得到了答案..

jQuery.namespace = function() {

    var a=arguments, o=null, i, j, d;

    for (i=0; i<a.length; i=i+1) {

        d=a[i].split(".");



        o=window;

        for (j=0; j<d.length; j=j+1) {

            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];

             console.log(o); 
        }

    }
   // console.log(o); //Object {} 
    return o;
};

// definition
jQuery.namespace( 'jQuery.debug' );
jQuery.debug.test1 = function()
{
    alert( 'test1 function' );
};
jQuery.debug.test2 = function()
{
    alert( 'test2 function' );
};
// usage
jQuery.debug.test1();
jQuery.debug.test2();

它有两个部分,一个是“Jquery.namespace” - 函数,另一个是声明命名空间的新方法。但我无法理解“Jquery.namespace”函数在这里究竟做了什么......我试图逐行理解,但我无法理解该函数在这里所做的过程......

有人向我解释一下这个功能,它是如何工作的?或任何其他使用jQuery制作名称间距的简单方法..

提前致谢

4

1 回答 1

1

该函数正在接受参数,这些参数是您要创建的命名空间列表。

让我们简化它,所以它只需要一个命名空间

jQuery.namespace = function(namespace) {
    var o=null, j, d;
    d=namespace.split(".");
    o=window;
    for (j=0; j<d.length; j=j+1) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]]; 
        }
    }
    return o;
};

那么这个函数就相当简单了。实际发生的事情是从我们递归检查我们在命名空间中声明的对象是否存在的窗口开始。例如,调用jQuery.namespace('foo.bar')该函数将检查窗口是否具有属性foo,如果没有,它将创建它。然后该函数将检查是否window.foo有属性bar,如果没有则创建它。

最后,该函数所做的就是创建一个链接到具有所有相关子对象的窗口(全局变量)的对象。然后,您只需将函数和变量分配给嵌套对象,而不是直接分配给您将使用全局变量执行的窗口。

于 2013-09-04T05:14:39.987 回答