【有书共读】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 ; }









全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务