Ver Mensaje Individual
  #4 (permalink)  
Antiguo 02/04/2008, 16:32
Avatar de MaBoRaK
MaBoRaK
 
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 7 meses
Puntos: 35
Re: Ejemplo Javascript orientado a objetos

enloading........

Cita:
Iniciado por ZiTAL Ver Mensaje
Hola a todos, tengo esto:
Código:
	var persona = {
	        nombre: "Felipe",
	        apellido: "Pino",
	        presentar: function() {
				alert("Mi nombre es " + this.nombre + " " + this.apellido);
		}
	};
	persona.presentar({
	});
lo que me gustaria es que le pasase yo el nombre del parametro y su valor, ejemplo:

Código:
	var persona = {
	        // inicializar "nombre" y "apellido"
	        presentar: function() {
				alert("Mi nombre es " + this.nombre + " " + this.apellido);
		}
	};
	persona.presentar({
	        nombre: "Felipe",
	        apellido: "Pino",
	});
esto como se podria hacer?
Bienvenido al mundo POO!!!! jejeje

Bueno en primera debes separar una propiedad de un parametro ya que no puedes, no deberías declarar un parametro y que esta se convierta en una propiedad (this.nombre)

La mayoría de los frameworks usan esa "forma" (nota que en ningun momento lo inicializan) como una simple TABLA DE DISPERSIÓN link.

Ahora bien, yendo a tu caso. se haría de esta forma.
Código PHP:
var persona = {
            
// inicializar "nombre" y "apellido"
                
initialize:function(data)
                {
                    for(var 
i in data)
                    {
                        if(
data.propertyIsEnumerable(i))
                        {
                            
this[i]=data[i];
                         }
                    }
                },
            
presentar: function(param) {
                                
this.initialize(param || {});
                
alert("Mi nombre es " this.nombre " " this.apellido);
        }
    };
    
persona.presentar({
            
nombre"Felipe",
            
apellido"Pino",
    }); 
Pero no se... no le veo mucho sentido :D pero de esa forma se hace.
Algo que yo siempre hago para estos casos y quiero compartirlo contigo es.

Código PHP:
 /**
 * propertyIsEnumerable for Safari
 * @return Boolean
 **/
 
Object.prototype.propertyIsEnumerable=function(i)
 {
         return (
typeof Object.prototype[i]==="undefined")?true:false;
 }
 
/**
 * Length of Object
 * @return Int
 */
 /*Object.prototype.length       = function()
 {
         var j=0;
         for (var i in this) {
                 if(this.propertyIsEnumerable(i))
                 {
                         j+=1;
                 }
         }
         return j;
 };*/
 /**
 * Concat Object
 * @param {Object} obj Object
 * @return {Object} this
 */
 
Object.prototype.concat = function(obj)
 {
         for (var 
i in obj)
         {
                 if(
obj.propertyIsEnumerable(i))
                 {
                         
this[i]=obj[i];
                 }
         }
         return 
this;
 };
var 
= function()
{
//este método pone variables por defecto en la clase
//o lo que comunmente se conoce como propiedades o variables definidas.
    
this.make=function(options)
   {
//esto es clave porque el primer objeto tiene las propiedades con sus valores por defecto
        
this.options={
            
nombre:'tu no tienes nombre y tomo ESTO como default'
        
}.concat(options || {});
        return 
this;
    };
//procesamos de forma normal
    
this.process=function()
    {
        
alert(this.options.nombre)
    }
    return 
this;
};
var 
= new a().make({
    
nombre:'maborak'
});
b.process(); 
De esta forma puedes tener por un lado variables POR DEFECTO o bien construir esas variables por defecto en base a los parámetros que se te ocurra pasarle al método make.

Y bueno... nose. preguntas? :D

connection closed.
__________________

Maborak Technologies