1.類結構剖析
function fn(){
var variable = ""; //靜態屬性
function method(){}; //靜態方法
this.propertyName = value; //特定屬性
this.method = function(){};//特定方法
}
ps: 靜態屬性和靜態方法是用於函數fn內部使用的,不可被外界訪問。而特定屬性和特定方法是在函數被new後所創建的對象應該擁有的屬性和方法,因此說可以被外界所訪問。若沒有new關鍵字,則會被認為是普通函數調用,this指向會是window對象。
此外,還可以直接這樣寫:
fn.propertyName 或 fn.method = function(){};
就好比java中類的靜態變量,在js裡new出生的對象不能使用類的成員變量,而java中類和對象都可以直接使用。
2.矩形類
function Rect(width.height){
this.r_width= width;
this.r_height= height;
this.desc = function(){
return '我是一個矩形哦';
};
};
//擴展矩形計算面積方法
Rect.prototype.getArea = function(){
return this.r_width * this.r_height;
};
//打印結果函數
Rect.prototype.toString = function(){
alert("這個矩形的面積是:"+this.getArea()+",寬度是:"+this.r_width+",高度是:"+this.r_height);
};
3.平行四邊形類
function Square(value){
this.s_width = value;
this.s_height = value;
};
Square.prototype = Rect.prototype; //將Rect的prototype對象賦給Square,拿不到Rect的特有屬性和方法,並且會覆蓋Square中原有擴展的屬性或方法。若不想被覆蓋,可在後面繼續加Square.prototype.method= function{};
Square.prototype = new Rect();//這種寫法會拿到Rect特有的屬性和方法,還包括Rect中原型鏈的東西。同時也需要注意Square.prototype容易被覆蓋的問題,一般寫在後面擴展。
例如:
Square.prototype.say = function(){
return "我是一個平行四邊形";
};
同時也可對繼承過來的屬性和方法進行覆蓋
Square.prototype.getArea = function(){
return this.s_widht * s_height;
}