【有书共读】JavaScript面向对象编程指南 6-02
共享属性迁移到原型
当我们用构造器创建对象时,其属性就会添加到this中。但是,当被添加的属性不会随着实体变化,可以重用时,就造成效率低下。
function Shape(){
this.name = 'Shape';
} 因为在new Shape()时,每个实体都有新的name属性,并在内存中有自己独立的空间。这样就造成了效率低下和浪费空间。我们可以通过原型共享该属性,来解决此问题。
function Shape(){
Shape.prototype.name = 'Shape';
} 回顾之前的Shape()、TwoDShape()、Triangle(side,height)。
function Shape(){}
Shape.prototype.name = 'Shape';//被添加的属性不会随着实体变化,加入原型,共享
Shape.prototype.toString = function(){
return this.name;
}
function TwoDShape(){}
TwoDShape.prototype =new Shape();//创建Shape对象,并赋予TwoDShape
TwoDShape.prototype.constructor= TwoDShape;
TwoDShape.prototype.name = '2D Shape ';//被添加的属性不会随着实体变化,加入原型,共享
function Triangle(side,height){
/*side,height属性在不同对象中,会有不同的值,必须保持自身*/
this.side = side;
this.height = height;
}
Triangle.prototype = new TwoDShape();//创建TwoDShape对象,并赋予Triangle
Triangle.prototype.constructor = new Triangle();
Triangle.prototype.name = 'Triangle';//被添加的属性不会随着实体变化,加入原型,共享
Triangle.prototype.getArea = function (){//getArea方法不会随着实体变化,加入原型,共享
return this.side * this.height / 2 ;
}


查看22道真题和解析