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 originalvar ejemplo = new Function();
ejemplo.prototype = {
foo: "bar",
baz: function(){
console.log(this.foo);
}
};
var a = new ejemplo();
a.baz(); //Imprime 'bar'
Mientras que con la primera, defines propiedades, las cuales pueden tener
descriptores, siendo estos únicos.
Código Javascript
:
Ver originalvar ejemplo = new Object();
Object.defineProperty(ejemplo, "foo", {
value: "bar"
});
console.log(ejemplo.foo); //Imprime 'bar'
También así:
Código Javascript
:
Ver originalvar ejemplo = new Object();
Object.defineProperty(ejemplo, "foo", {
get: function(){
return "bar";
}
});
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