Вот учебник стандартный способ описания «класс» или функцию конструктора в JavaScript, прямо из Definitive Guide на JavaScript:методы Прикрепление к прототипу из функции конструктора
function Rectangle(w,h) {
this.width = w;
this.height = h;
}
Rectangle.prototype.area = function() {
return this.width * this.height;
};
Я не например, манипулирование прототипами болтающихся здесь, поэтому я пытался придумать способ инкапсуляции определения функции для area
внутри конструктора. Я придумал это, что я не рассчитывать на работу:
function Rectangle(w,h) {
this.width = w;
this.height = h;
this.constructor.prototype.area = function() {
return this.width * this.height;
};
}
Я не ожидал, что это работает, потому что this
ссылка внутри функции area
должна быть направлена к самим area
функции, так что я не имел бы доступа к width
и height
от this
. Но, оказывается, я это делаю!
var rect = new Rectangle(2,3);
var area = rect.area(); // great scott! it is 6
Некоторые дальнейшие испытания подтвердили, что this
ссылки внутри функции area
была на самом деле ссылка на объект под строительством, а не сама функция области.
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');}
};
}
Оказывается, предупреждение всплывает, и this
это точно строящийся объект. и так, что здесь происходит? Почему this
не this
Я ожидаю, что это будет?
Если у вас есть сто прямоугольников, вы собираетесь повторно использовать этот прототип метода сто раз. Хорошо, что у вас есть только один метод ... – kennebec
Это хороший момент. –