在JavaScript中,我们经常要给已定义的对象添加一些方法,如下:

  

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

   var cir = new circle(8,9);

   这时我们突然要计算cir对象的面积,怎么办呢?我们可以专门为这个对象新定义一个计算面积的方法。

 

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

这时就可以调用cir.area()来计算面积了。

当然上面的语句也可以这样写:

 

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

两种写法效果一样。

有时候我们需要每个对象都有area()方法,那应该怎么做呢?

这时代码如下:

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

这样每个circle定义的对象就会有area()方法了。

   这样定义并不是一个最好的方式,因为这样定义会使每个对象里都area()方法,如果你定义的对象很多时,就会多占相当一部分内存。应该怎么做呢?

   在JavaScript中,定义一个对象时都会继承一个原始对象,我们可以通过给原始对象添加area()方法而不必让每个circle对象都有area()方法。我们用prototype属性来实现。如下:

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

   ///使用prototype之前必须定义一个对象,这里我们定义了一个匿名对象///

new circle()
   circle.prototype.area=area;

这样实现就不让circle对象多占内存了。

定义方法是这样,定义属性变量也是一样的道理。