Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/06/2014, 20:55
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: defineProperty vs Prototype

Que la primera es más reciente que la segunda.

Además, con la primera puedes definir varias propiedades y métodos a la vez, aunque claro, con la segunda también puedes hacerlo utilizando un objeto literal.

Código Javascript:
Ver original
  1. var ejemplo = new Function();
  2.  
  3. ejemplo.prototype = {
  4.     foo: "bar",
  5.     baz: function(){
  6.         console.log(this.foo);  
  7.     }
  8. };
  9.  
  10. var a = new ejemplo();
  11. a.baz(); //Imprime 'bar'

Mientras que con la primera, defines propiedades, las cuales pueden tener descriptores, siendo estos únicos.

Código Javascript:
Ver original
  1. var ejemplo = new Object();
  2.  
  3. Object.defineProperty(ejemplo, "foo", {
  4.     value: "bar"
  5. });
  6.  
  7. console.log(ejemplo.foo); //Imprime 'bar'

También así:

Código Javascript:
Ver original
  1. var ejemplo = new Object();
  2.  
  3. Object.defineProperty(ejemplo, "foo", {
  4.     get: function(){
  5.         return "bar";
  6.     }
  7. });
  8.  
  9. console.log(ejemplo.foo); //Imprime 'bar'

Los ejemplos de arriba son bastante pobres, te sugiero leer la documentación existente en donde encontrarás mejores y más extensos ejemplos.

Por otro lado, prototype está definida como una propiedad de Function, mientras que defineProperty, de Object, aunque al fin y al cabo, en JS casi todos son objetos.

Con la primera también puedes definir métodos get y set, algo similar a los getter y setter de PHP. Con la segunda, tendrías que definirlos manualmente.

La documentación existente te puede sacar de dudas:

Prototype
defineProperty

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 22/06/2014 a las 22:04 Razón: Palabra mal escrita