Редактировать Просто понял, что я не отвечаю прямо на ваш вопрос. Сожалею! Однако, надеюсь, это поможет вам понять некоторые альтернативные методы.
Это техника, которую я использую время от времени, например, когда я хочу добавить свойство или функцию один раз и не допустить перезаписи позже.
var module = new function(){
var modules = {}; //internal module cache
return function(name, module){
//return all modules
if( !name ) return modules;
//return specific module
if( modules[name] ) return modules[name];
//return the module and store it
return modules[name] = module;
}
}
Так что вы можете использовать его так:
//will store this since it doesn't exist
module('test', 'foo'); //Since 'test' doesn't exist on the internal 'modules' variable, it sets this property with the value of 'foo'
module('test'); // Since we aren't passing a 2nd parameter, it returns the value of 'test' on the internal 'modules' variable
module('test', 'bar'); //We are attempting to change the value of 'test' to 'bar', but since 'test' already equals 'foo', it returns 'foo' instead.
module(); // { 'test': 'foo' } //Here we aren't passing any parameters, so it just returns the entire internal 'modules' variable.
Главное, на что нужно обратить внимание, это то, что мы используем 'new function ()'. Это делается при назначении, потому что мы действительно хотим, чтобы «модуль» был внутренней функцией, а не внешней. Но чтобы создать замыкание для внутренней переменной 'var modules', внешняя функция должна выполняться при присваивании.
Также обратите внимание, что вы могли бы написать внешнюю функцию, чтобы она также выполнялась самостоятельно:
var module = function(){
var modules = {};
//other stuff
}();