0

我有一个名称空间对象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+"]";

    }
4

1 回答 1

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

于 2013-03-02T03:03:57.790 回答