0

下面两种方式的继承定义有什么区别

function Rectangle(w,h){
   this.width=w;
   this.height.h;
   this.area=function(){return this.width*this.height;}
}

function Rectangle(w,h){
   this.width=w;
   this.height.h;

}
Rectangle.prototype.area=function(){return this.width*this.height;} 

我看到有人说第一种方法是对旨在由同一类的所有对象共享的方法使用常规属性效率低下。

欢迎任何评论

4

2 回答 2

1

第一种方式,你可以直接在 area 函数中使用 w 和 h,相当于将它们用作私有变量。

function Rec(w,h) {
    this.setW=function(newW){
        w=newW;
    }
    this.area=function(){
        return w*h;
    }
}

var rec=new Rec(5,6);

你不能做 alert(rec.w) 或 rec.w=5。因为类内没有this.w。但你可以

rec.setW(2);   
alert(rec.area());

这将提醒 12。

http://jsfiddle.net/vanessachem/Hmyyc/像这样。w 和 h 可以视为私有变量。它们只能通过类中的 setter 函数进行重置。

当您需要创建多个实例时效率低下。如果你只想创建单例,第一个很容易管理。

第二个的优点是您可以将原型函数放在不同的文件中。它适用于多个实例。但是,您不能将 w 和 h 视为私有变量。您不能直接在 area 函数中使用 w 或 h 。

于 2013-05-17T01:44:06.650 回答
0

第一种方式,每次你构造一个新的 Rectangle 时,你也会创建一个新的匿名函数并将它赋值给this.area. 如果要构造多个 Rectangle,则第二种方法更有效,因为匿名函数仍然只创建一次,并且所有 Rectangle 都可以通过其原型访问它。

于 2013-05-17T01:44:19.190 回答