JavaScript 繼承方式(2)

作者: snandy  來源: 博客園  發布時間: 2011-03-15 11:29  閱讀: 1191 次  推薦: 0   原文鏈接   [收藏]  

  接上文:JavaScript繼承方式(1)

  這篇開始寫幾個工具函數實現類的擴展。每個工具函數都是針對特定的寫類方式(習慣)。這篇按照構造函數方式寫類:屬性(字段)和方法都掛在this上。以下分別提供了個類,分別作為父類和子類。

 
//父類Person
function Person(nationality) {
this.nationality = nationality;
this.setNationality = function(n) {this.nationality=n;};
this.getNationality = function() {return this.nationality;};
}


//類Man
function Man(name) {
this.name = name;
this.setName = function(n){this.name=n;};
this.getName = function(){return this.name;};
}

  1,繼承工具函數一

 
/**
* @param {Function} subCls 子類
* @param {Function} superCls 父類
* @param {Object} param 父類構造參數

*/
function extend(subCls,superCls,param) {
superCls.call(subCls.prototype,param);
}

  使用如下:

 
extend(Man,Person,'China');
var m
= new Man('jack');
console.log(m.nationality);
//China
console.log(m.setNationality('Japan'));
console.log(m.getNationality(
'Japan'));//Japan

  輸出可以看到Man繼承了Person的屬性及所有方法。這種繼承方式于java的很不一樣哦:

 
class Animal {
int legs;
Animal(
int l) {
legs
= l;
}

int getLegs() {
return legs;
}
}
public class Person extends Animal{

//屬性(字段)
String name;
//構造方法(函數)
Person(int legs, String name) {
super(legs);
//調用父類構造器
this.name = name;
}

//方法
String getName() {
return this.name;
}
public static
void main(String[] args) {

Person p
= new Person(2,"jack");
System.out.println(p.legs);
}
}

  Java中,子類Person在自身構造方法中調用父類構造方法super(legs),創建對象的時候直接將父類構造參數legs:2傳進去,不僅僅只傳自己的name:jack。上面JavaScript繼承是在extend時傳父類構造參數(extend函數的第三個參數),而不是在new Man時將父類構造參數傳過去。好,模擬Java來實現下extend,這里巧妙的在子類上暫存了父類引用。

  2,繼承工具函數二

 
/**
* @param {Function} subCls
* @param {Function} superCls

*/
function extend(subCls,superCls) {
subCls.supr
= superCls;
}

  還是以Person為父類,來實現子類Woma:

 
function Woman(nationality,name) {
Woman.supr.call(
this,nationality);//和java有點類似哦,在子類中調用父類構造器
this.name = name;
this.setName = function(n){this.name=n;};
this.getName = function(){return this.name;};
}
extend(Woman,Person);

  最后,創建對象的方式和java也類似,即new的時候同時將父類構造參數(nationality:Japan)傳進去。

 
var w = new Woman('Japan','lily');
console.log(w.nationality);
//Japan
w.setNationality('U.S.A');
console.log(w.getNationality());
//U.S.A
0
0
 
標簽:JavaScript
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()