Autor Tema: JavaScript diferencia entre propiedades estáticas y herencia prototype CU01147E  (Leído 2616 veces)

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Necesito un empujón ,para poder tener claro cuando utilizar prototype o propiedades estáticas. No veo diferencia alguna y me gustaría me pudieran ayudar a entender cuando usar una u otra.

EN EL CASO DE PROTOTYPE:

Código: [Seleccionar]
function construyendoProto(){
    this.definicionSegunDiccionario="Un cometa es muy chulo";
    this.obtenerRadio=function(){
        return(this.diametro)/2;       
    }
    this.obtenerTemperaturaFarenheit=function(){
        return (1.8*this.temperatura)+32;
       
    }
}
   
cometaDef.prototype=new construyendoProto();


Y EN EL CASO DE METODOS/PROPIEDADES ESTÁTICAS:

Código: [Seleccionar]
cometaDef.definicionSegunDiccionario="Un cometa es muy chulo";
cometaDef.obtenerRadio=function(){
        return(this.diametro)/2;       
    }
cometaDef.obtenerTemperaturaFarenheit=function(){
        return (1.8*this.temperatura)+32;   
    } 
   
« Última modificación: 13 de Noviembre 2015, 08:38 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Hola la diferencia sería la siguiente

Una propiedad estática digamos "de una clase" (aunque en JavaScript no se use el término "clase") sólo puede ser accedida directamente desde el nombre de dicha clase, pero no puede ser accedida por instancias de la clase.

Las propiedades definidas a través de prototype son propiedades que comparten por herencia todas las instancias de la clase.

Supongamos una clase Cuadrado que hereda de Rectangulo. En ese caso cualquier instancia de Cuadrado compartirá las propiedades del prototype Rectangulo, pero no compartirá las propiedades estáticas de Rectangulo.

Una diferencia de JavaScript con Java es que JavaScript no permite el acceso desde objetos a las propiedades estáticas, mientras que Java sí lo permite.

Este código sería un ejemplo de la diferencia entre propiedad estática y propiedad heredada

Código: [Seleccionar]
//Constructor
var Person = function (name, age){
    //private properties
    var priv = {};
   
    //Public properties
    this.name = name;
    this.age = age;
   
    //Public methods
    this.sayHi = function(){
        alert('hello');
    }
}

// A static method; this method only
// exists on the class and doesn't exist
// on child objects
Person.sayName = function() {
    alert("I am a Person object ;)"); 
};

// An instance method;
// All Person objects will have this method
Person.prototype.setName = function(nameIn) {
    this.name = nameIn; 
}

// Tests
var per = new Person('John Doe', 22);

//Shows alert
Person.sayName();

//TypeError: Object [object Object] has no method 'sayName'
per.sayName()

//Show alert
per.sayHi();

//John Doe
per.name;

//22
per.age;

per.setName('Jane Doe');

//Jane Doe
per.name;

Salu2

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Muchas gracias, ahora lo entiendo bastante mejor.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".