É um facto garantido: todos os objectos em javascript são publicos.
Isso não implica que não possamos contornar o problema. :)
De forma a podermos esconder as nossas declarações privadas temos de, se o objecto que estamos a criar for estático, retornar só as declarações que queremos publicas, caso contrario, declaramos as variaveis dentro do scope do objecto (que na realidade é uma função).
String.isNullOrEmpty = function(obj)
{
return (obj == null || obj.length == 0)
}
var CreativeMinds = {};
CreativeMinds.Utils = {};
CreativeMinds.Utils.Namespace = function()
{
/* Private Declarations */
var strRootNameSpace = "CreativeMinds";
var rootNameSpace = window[strRootNameSpace];
return{
/* Public Declarations */
create: function(strNameSpace)
{
if (String.isNullOrEmpty(strNameSpace)) {
return null;
}
var levels = strNameSpace.split(".");
var currentNS = rootNameSpace;
for (var i=(levels[0] == strRootNameSpace) ? 1 : 0; i<levels.length; ++i) {
currentNS[levels[i]] = currentNS[levels[i]] || {};
currentNS = currentNS[levels[i]];
}
return currentNS;
}
}
}();
CreativeMinds.Utils.Namespace.create("CreativeMinds.Controls");
CreativeMinds.Controls.TextBox = function(strID)
{
/* Private Declarations */
var _id = strID;
var _ctrl = null;
/* Private Constructor */
function init()
{
_ctrl = document.getElementById(_id);
}
init();
/* Public Declarations */
this.id = _id;
this.control = _ctrl;
this.get_Text = function()
{
return _ctrl.value;
}
};
var txtNome = new CreativeMinds.Controls.TextBox("txtnome");
alert(txtNome.get_Text());
E pronto. Temos dois objectos criados, um dele estático, "arumados" dentro de namespaces, e com declarações privadas.
Temos aqui a base para o desenvolvimento de uma framework client-side.
Restantes partes:
1ª Parte:
OOP
2ª Parte:
namespaces
3ª Parte: Private Declarations
4ª Parte: Agrupar tudo numa framework
5ª Parte: Links de Referência
Posted
22-6-2006 21:16
por
Bruno Figueiredo