inputError
inputError

Reputation: 610

Creating a namespace object from string to call a function?

i have a namespace object form.iso.methodName as a string and i want to call that method. I cant create namespace object like [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);
    }

*Update- Found solution *

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+"]";

    }

Upvotes: 0

Views: 858

Answers (1)

elmasse
elmasse

Reputation: 231

You can do this:

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]();

You can improve this by retrieving the global object instead of using window

Upvotes: 2

Related Questions