Estoy trabajando en una utilidad para crear clases en JavaScript. Y funciona, el problema es cómo definir atributos privados.Creación de clases con propiedades privadas
Este es el código
var OO = {
Class:function(){
var len = arguments.length;
var data = arguments[len-1];
var Klass;
if (data.constructor === Object){
Klass = function(){};
} else {
Klass = data.constructor;
delete data.constructor;
}
OO.extend(Klass.prototype,data); //Classic Extend Method
return Klass;
},
//Simple extend method, just what I need in this case
extend: function(target, source){
var prop;
for (prop in source)
target[prop] = source [prop];
}
}
Así es como funciona
// first create a class
var person = OO.Class ({
constructor: function (name, age) {
this.name = name;
this.age = age;
},
name:'',
age:'',
getName: function() {
return this.name;
},
getAge: function() {
return this.age;
}
});
Y aquí es la instancia
var one = new Person ('josh', 22);
Y el problema:
one.age// returns 22
one.name// returns josh
Lo que necesito es que estas propiedades sólo se puede acceder mediante métodos como getName() y getAge()
EDIT1: Agregado función Extender
Apenas se puede hacer que el uso de la solución actual. – zerkms
¿Por qué algunas personas insisten en codificar JavaScript clásicamente? – AlienWebguy
Puede que le interese el artículo de Douglas Crockford [Miembros privados en JavaScript] (http://javascript.crockford.com/private.html). – RobG