2012-06-07 2 views
1

Моя основная установка целая куча Javascript под анонимным самоосуществляющийся функции:Firebug и самоосуществляющийся анонимные функции

(function() { 
    ... 
})(); 

Моя проблема заключается в том, что я не могу показаться, чтобы получить доступ к объектам в пределах эта функция ASI через вкладку DOM. Я пробовал оба:

var MYAPP = function() { 
    ... 
}; 

var MYAPP = (function() { 
    ... 
})(); 

Первый не срабатывал вообще. Второй только что сказал MYAPP: undefined на вкладке DOM.

Есть ли способ обойти это?

+0

Вы вернули что-нибудь во второй форме? – wong2

+0

@ wong2 Нет, я ничего не возвращаю. Это просто попытка создать пространство имен. – Nick

ответ

2

В вашей первой версии вы просто создаете функцию с именем MYAPP, но вы ее не выполняете.

Во второй версии ваша функция выполнена, и ее результат присваивается MYAPP. Но ваша функция, похоже, ничего не возвращает, поэтому MYAPP остается неопределенным.

См. A Javascript Module Pattern на YUIBlog для получения информации по этому шаблону. Их пример выглядит следующим образом:

YAHOO.myProject.myModule = function() { 

    return { 
     myPublicProperty: "I'm accessible as YAHOO.myProject.myModule.myPublicProperty.", 
     myPublicMethod: function() { 
      YAHOO.log("I'm accessible as YAHOO.myProject.myModule.myPublicMethod."); 
     } 
    }; 

}(); // the parens here cause the anonymous function to execute and return 

Таким образом, ваша функция в основном возвращает объект, содержащий все публичные элементы. Вы также можете получить доступ к ним с помощью Firebug.

+0

Спасибо за это. У Крокфорда похожая картина, я теперь вспомнил, хотя я и не думал использовать ее в такой степени. – Nick

Смежные вопросы