Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 从字符串创建名称空间对象以调用函数?_Jquery_Javascript - Fatal编程技术网

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

Jquery 从字符串创建名称空间对象以调用函数?,jquery,javascript,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);

我有一个名称空间对象
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){//ns名称空间是对象
var splitNameSpace=ns.split('.');
var methodName=splitNameSpace.pop();
//log(splitNameSpace);
var内容=[];
对于(var i=0;i您可以这样做:

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]();
函数名称空间(ns){
变量d,o;
n=ns.分裂('.');
o=窗口[n[0]]=窗口[n[0]]| |{};
var l=n.长度;

对于(var i=1;i您能试着更好地解释一下您想要做什么吗?@AndrewMcGivery我正在函数split参数中传递一个名称空间字符串,我希望该函数拆分并构建名称空间对象[form][iso[methodName]所以我可以调用不同名称空间对象中的函数..我希望我解释过。我英语不好所以,如果我想理解的话,你想调用form.iso.methodName(),给定字符串“form.iso.methodName”?@AndrewMcGivery是的,但是form.iso是名称空间对象你不能调用eval(ns+“()”)?我无法获取它,我正在尝试为方法名称拆分后弹出最后一个ns,其余的作为命名空间对象,但我不明白您在做什么?您可以调用命名空间来检索方法的命名空间:
var param='foo.bar.blah.methodName';method=ns.split('.').pop();ns=param.split('.).slice(0,-1).join('.);obj=namespace(ns);obj[method]();
我发现解决方案有点不整洁,但有效
split:function(ns){var splitNameSpace=ns.split('.');var methodName=splitNameSpace.pop();//console.log(splitNameSpace);var content=[];var obj;for(var i=0;iOW-正是我所需要的,而且它可以工作!一条注释:在函数名称空间中没有使用变量d。
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]();