将方法“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
中Chapter 9 , part 1
,作者说,界定方法“区域”的原型对象里面是有益的,但他的解释并没有真正理解:
“..每个 Rectangle 对象的面积总是指同一个函数(当然,有人可能会改变它,但您通常希望对象的方法是常量)。对具有以下特性的方法使用常规属性是低效的旨在由同一类的所有对象共享(即使用相同构造函数创建的所有对象)。”
我知道这个问题看起来几乎像这样一个,但事实并非如此。