在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屬性來實現。如下:
function area(){
return this.width*this.height;
}
function circle(w,h){
this.width=w;
this.height=h;
}
///使用prototype之前必須定義一個對象,這里我們定義了一個匿名對象///
new circle()
circle.prototype.area=area;
這樣實現就不讓circle對象多占內存了。
定義方法是這樣,定義屬性變量也是一樣的道理。
轉載:http://blog.sina.com.cn/s/blog_49cc672f010007ca.html