Какая разница между определением метода "area" как свойства "this" вместо "prototype"?
//console.clear()
function Rectangle(w, h)
{
this.width = w;
this.height = h;
this.area = function( ) { return this.width * this.height; }
}
var r = new Rectangle(2, 3);
var a = r.area( );
//console.log(a)
function Square(s)
{
this.side= s;
}
Square.prototype.area = function(){return this.side * this.side; }
var r = new Square(2);
var a = r.area( );
//console.log(a)
В JavaScript - The definitive guide
в разделе Prototypes and Inheritance
of Chapter 9 , part 1
автор говорит, что определение метода "area" внутри объекта-прототипа полезно, но его объяснение было не совсем понятным:
".. область каждого прямоугольника объект всегда ссылается на тот же функции (кто-то может ее изменить, конечно, но вы обычно методы объекта постоянны). Неэффективно использовать регулярные свойства для методов, которые предназначенные для совместного использования всеми объектами одного класса (то есть все объекты, созданные с тем же конструктором)".
Я знаю, что этот вопрос почти похож на this один, но это не так.