0

This is a question about scope in javascript and making APIs, I have the following code:

function test_objectExplorer()
{
    var obj = {
        a:true,
        b:12,
        c:{
            a:12,
            b:null
        },
        d:function(msg){
            alert(msg);
        }
    };
    alert(objectExplorer(obj));
}


function objectExplorer(obj)
{

var explore = function(obj,depthCount)
{
    var str = "";
    for(var prop in obj)
    {
        for(i=0; i<depthCount; i++)str += "    ";
        str += prop + " = " + obj[prop] + "\n";
        if( (typeof obj[prop] == 'string') || obj[prop] instanceof String)continue;
        str += explore(obj[prop],depthCount+1);
    }
    return str;
}
return explore(obj,0);
}

I use the objectExplorer function for 'looking' at javascript objects. It is the internal explore function which actually does the work, as you see, but I used the 2nd argument as a depth counter to provide appropriate text indentation for the output string.

I didn't want users to have to use a function which required an additional argument which always has to be supplied in the first instance as the number zero, so I wrapped it in the 'API' function call objectExplorer. My question is, is this the right approach to take? I come from C#, Java and other class-based OOP languages and the API in those are just the public properties and methods but in javascript I know of no way to make things private other than hiding their declaration inside another object.

1 Answer 1

1

In JavaScript the function determines the scope of variables. So

function() {
  for (var i=0 ; i<10;i++) {
    var a = i; 
  }
  alert(a);
}

will alert 9, because the variable is within the same function.

If you want to make modules maybe this will help you out: http://blog.davidpadbury.com/2011/08/21/javascript-modules/

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.