从字符串创建命名空间对象以调用函数?

时间:2013-03-02 02:54:05

标签: jquery javascript

我有一个名称空间对象form.iso.methodName作为字符串,我想调用该方法。我无法像[form] [iso] [methodName]

那样创建名称空间对象
split : function(ns) { // ns namespace is object
    var splitNameSpace = ns.split('.');
    var methodName = splitNameSpace.pop();
    //console.log(splitNameSpace);
    var content = [];

    for (var i=0;i<splitNameSpace.length;i++){
        content = [splitNameSpace[i]];
        console.log(content);
    }

* 更新 - 找到解决方案*

split : function(ns) {
    var splitNameSpace = ns.split('.');
    var methodName = splitNameSpace.pop();
    //console.log(splitNameSpace);
    var content = [];
    var obj;
    for (var i=0;i<splitNameSpace.length;i++){
        obj = [splitNameSpace[i]];
    content = content+"["+obj+"]";

    }

1 个答案:

答案 0 :(得分:2)

你可以这样做:

function namespace(ns){
    var d, o;
    n = ns.split('.');
    o = window[n[0]] = window[n[0]] || {};
    var l = n.length;
    for(var i=1; i<l; i++){
        o = o[n[i]] = o[n[i]] || {};
    }
    return o;
}

 var param = 'foo.bar.blah.methodName',
     method = param.split('.').pop(),
     ns = param.split('.').slice(0,-1).join('.'),
     obj = namespace(ns); 

 obj[method]();

您可以通过检索全局对象而不是使用window

来改善这一点