Ecco il modo standard da manuale di descrivere una 'classe' o funzione di costruzione in JavaScript, direttamente dalla Guida definitivo per JavaScript:metodi Collegamento a prototipare dall'interno funzione di costruzione
function Rectangle(w,h) {
this.width = w;
this.height = h;
}
Rectangle.prototype.area = function() {
return this.width * this.height;
};
non lo faccio come la manipolazione del prototipo penzolante qui, quindi stavo cercando di pensare a un modo per incapsulare la definizione della funzione per area
all'interno del costruttore. Sono venuto con questo, che ho fatto non si aspettano di lavorare:
function Rectangle(w,h) {
this.width = w;
this.height = h;
this.constructor.prototype.area = function() {
return this.width * this.height;
};
}
non mi aspettavo questo lavoro perché il riferimento this
all'interno della funzione area
dovrebbe puntare alla funzione area
stesso, così ho non avrebbe accesso a width
e height
da this
. Ma si scopre che lo faccio!
var rect = new Rectangle(2,3);
var area = rect.area(); // great scott! it is 6
Alcuni ulteriori test ha confermato che il riferimento this
all'interno della funzione area
realtà era un riferimento all'oggetto in costruzione, non la funzione zona stessa.
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');}
};
}
scopre l'avviso si apre, e this
è esattamente l'oggetto in costruzione. Allora, cosa sta succedendo qui? Perché lo this
non è lo this
, mi aspetto che sia?
Se si dispone di un centinaio di rettangoli, si intende ridichiarlo per cento volte. Meno male che hai solo un metodo ... – kennebec
Questo è un buon punto. –