jquery-toad
Version:
jQuery TOAD - O velho e querido jQuery
52 lines (42 loc) • 1.99 kB
JavaScript
$namespace(1, '@', function (exports) {
var constants = {},
internals = exports.__internals__ = exports.__internals__ || {};
internals.setConstant = _setConstant;
/**
* Constantes
*/
exports.constants = constants;
/**
* Define uma constante global no sistema
*
* @param {string} constName - Nome da constante
* @param {any} constValue - Valor da constante
*/
function _setConstant(constName, constValue) {
if (typeof constName !== 'string')
throw new Error('Invalid constName "' + constName + '"');
if (!constValue)
throw new Error('constValue is required!');
if (typeof constants[constName] !== 'undefined')
throw new Error('Constant "' + constName + '" already exists!');
// Quando [Object.defineProperty] não está disponível (ex: IE8 <) simplesmente
// guardamos um valor para uso, porém sem nenhuma proteção de imutabilidade
//
// OBS: Apesar de usarmos [Object.defineProperty] para definir a constante,
// testamos [Object.defineProperties] porque o IE8 implementa [Object.defineProperty]
// mas somente para objetos DOM. Com suporte completo no IE9 junto com a
// implementação de [Object.defineProperties]
if (typeof Object.defineProperties !== 'function') {
console.warn('WARNING!', 'Object.defineProperty is not supported!');
return constants[constName] = constValue;
}
return Object.defineProperty(constants, constName, {
// TODO: Mudar para [false], isso irá impedir o uso de [for(var c in constants)]
// porém será necessário fornecer algum meio para listar as constantes
enumerable: true,
configurable: false,
writable: false,
value: constValue
})[constName];
}
})