Частные функции и модули Javascript API - PullRequest
0 голосов
/ 12 марта 2012

Это вопрос о области видимости в javascript и создании API, у меня есть следующий код:

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);
}

Я использую функцию objectExplorer для «просмотра» объектов javascript.Как вы видите, это внутренняя функция исследования, которая фактически выполняет эту работу, но я использовал 2-й аргумент в качестве счетчика глубины, чтобы обеспечить соответствующий отступ текста для выходной строки.

Я не хотел, чтобы пользователи использовали функцию, для которой требовался дополнительный аргумент, который всегда должен указываться в первом экземпляре как ноль, поэтому я обернул его в вызов функции API 'objectExplorer,Мой вопрос, это правильный подход?Я пришел из C #, Java и других основанных на классах языков ООП, и API в них являются просто общими свойствами и методами, но в javascript я не знаю способа сделать вещи приватными, кроме как скрыть их объявление внутри другого объекта.

1 Ответ

1 голос
/ 12 марта 2012

В JavaScript функция определяет область видимости переменных.Так что

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

предупредит 9, потому что переменная находится в той же функции.

Если вы хотите сделать модули, возможно, это поможет вам: http://blog.davidpadbury.com/2011/08/21/javascript-modules/

...