En JavaScript, lo mismo que puede hacer de muchas maneras diferentes.Prototipos en JavaScript
Considere los ejemplos:
1:
function Circle(radius) {
return {
"r" : radius,
"area" : function(){
return Circle.pi * this.r * this.r;
}
}
}
Circle.pi = 3.14159;
var a = Circle(10);
alert(a.area());
2:
function Circle(radius) {
this.r = radius;
}
Circle.pi = 3.14159;
Circle.prototype.area = function(){
return Circle.pi * this.r * this.r;
}
var a = new Circle(10);
alert(a.area());
El segundo es mejor que la primera, porque nosotros no definir la misma función área para cualquier instancia de Círculo.
Pero vamos a considerar 3:
function Circle(radius) {
return {
"r" : radius,
"area" : Circle.area
}
}
Circle.pi = 3.14159;
Circle.area = function(){
return Circle.pi * this.r * this.r;
}
var a = Circle(10);
alert(a.area());
¿Hay alguna razón para preferir segundo estilo en lugar de tercero? ¿O entendí mal algo?
Conoces la disponibilidad de ['Math.PI'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Math/PI), ¿no? –
posible duplicado de [javascript orientado a objetos con prototipos vs cierres] (http://stackoverflow.com/questions/3564238/object-oriented-javascript-with-prototypes-vs-closures) –
He hecho algunos puntos de referencia como aquí http : //blogs.msdn.com/b/kristoffer/archive/2007/02/13/javascript-prototype-versus-closure-execution-speed.aspx. El resultado: el 3er estilo entre el 1 y el 2 :) Gracias por todas las respuestas y comentarios, he aprendido mucho. – Dan