Aquí es la manera estándar de libros de texto de la descripción de una 'clase' o función constructora en JavaScript, directamente desde el guía definitiva para JavaScript:métodos Fijación al prototipo dentro de la función constructor
function Rectangle(w,h) {
this.width = w;
this.height = h;
}
Rectangle.prototype.area = function() {
return this.width * this.height;
};
no lo hago como la manipulación del prototipo colgante aquí, así que estaba tratando de pensar en una forma de encapsular la definición de función para area
dentro del constructor. Se me ocurrió con este, lo que hice no esperar a trabajar:
function Rectangle(w,h) {
this.width = w;
this.height = h;
this.constructor.prototype.area = function() {
return this.width * this.height;
};
}
No esperaba que esto funcione porque la referencia this
dentro de la función area
debe apuntar a la función area
en sí, por lo que no tendría acceso a width
y height
de this
. ¡Pero resulta que sí!
var rect = new Rectangle(2,3);
var area = rect.area(); // great scott! it is 6
Algunas pruebas ulterior confirmó que la referencia this
dentro de la función area
en realidad era una referencia al objeto en construcción, no la función de zona en sí.
function Rectangle(w,h) {
this.width = w;
this.height = h;
var me = this;
this.constructor.prototype.whatever = function() {
if (this === me) { alert ('this is not what you think');}
};
}
Resulta que la alerta aparece, y this
es exactamente el objeto en construcción. Entonces, ¿qué está pasando aquí? ¿Por qué this
no es el this
que espero que sea?
Si tiene cien rectángulos, va a redeclarar ese método de prototipo cien veces. Lo bueno es que solo tienes un método ... – kennebec
Ese es un buen punto. –