2015-04-07 3 views
-1

У меня есть файл javascript с большим количеством глобальных объектов. То есть, у меня есть много следующих видов кода происходит:Размещение содержимого файла * .js в объекте

var foo = 5; 
var bar = "string"; 

var getStuff = function() { 
    //...getStuff 
} 

Вопрос: Что это самый простой способ для меня, чтобы поместить полноту этого файла в объект?

Мне кажется, мои варианты следующим образом:

  1. Wrap весь файл в var Object = { ... };. Проблема в том, что я должен изменить синтаксис того, как объявляются переменные и функции.

  2. Вручную префикс Object.xxx перед каждой декларацией. Это также много ручной работы и делает вещи немного подробными.

Есть ли лучший способ? Или, если нет, есть ли причина предпочитать (1) или (2)?

+0

Это не класс. Это объект. JavaScript не имеет реальных классов. Кроме того, то, что вы ищете, - это [сразу вызываемое выражение функции] (http://en.wikipedia.org/wiki/Immediately-invoked_function_expression). –

+0

Вы правы - я изменил терминологию от «класса» до «объекта». – George

+1

Идти с [IIFE] (http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript). Aadit упомянул, вы можете попробовать [раскрывающий модуль] (http: // stackoverflow.com/questions/5647258/how-to-use-revealing-module-pattern-in-javascript). –

ответ

1

Я думаю, что вы хотите, таким образом

var someObject = function (window, document, undefined) { 
    /*you code...etc here*/ 
    return { 
    method1 : your_method..., 
    method2 : your_method..., 
    method2 : your_method..., 
    object : your_object... 
    } 
} (window, document); 

Причины передать окно и документ здесь, чтобы сделать это будет локальной переменным вместо иностранного переменным, чтобы минимизировать затраты на переменный поиск. Большинство js-двигателей теперь могут обрабатывать их сами, поэтому в настоящее время это может не потребоваться. На всякий случай этот код можно запустить в действительно старом браузере.

И неопределенный этот способ также объясняется соображениями совместимости, undefined является переопределяемой переменной в некоторых старых браузерах. Новые браузеры не позволят такое действие.

1

Вы не ищете класс или объект. Глядя на ваше описание, я думаю, вы хотите что-то вроде модуля.

Вы можете скрыть переменные из глобального масштаба и «экспорт» соответствующих бит так:

var MyModule = (function(){ 

    // regular code here 
    var hidden = 10, 
     visible = 20; 

    function doSomething() { 
    return hidden + visible; 
    } 

    // the "export" part 
    return { 
    twenty: visible, 
    doSomething: doSomething 
    }; 

})(); 

// then: 

MyModule.doSomething(); // => 30 
MyModule.twenty + 1 // => 21 
MyModule.hidden  // undefined - no such thing here 
// hidden, visible and doSomething without MyModule. are invisible here 

Вот один пример эмуляции модулей в JS. То, что (function(){...})() часть называется IIFE.

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