javascript 類別繼承
作者:Eve Cole
更新時間:2009-06-11 16:23:07
1.第一種方式,冒充物件的方式.(利用js裡的每一個方法名稱都是一個Function物件) Java程式碼function Parent(username){
this.username = username;
this.say = function(){
alert(this.username);
}
}
function Child(username,password){
this.temp = Parent;//temp指向Parent所指向的地方。 利用js裡的每一個方法名稱都是一個Function物件,指向一個方法。
this.temp(username);//初始化方法裡的內容delete this.temp;//temp沒有用了。可以直接刪除掉.this不可以丟了//Parent(username);//這樣寫表面看起來是正確的,其實是錯的。因為只有new出來的物件才有this,所以呼叫Parent裡的this就沒有值了this.password = password;
this.hello = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
parent.say();//zhangsan
var child = new Child("lisi","123456");
child.say();//lisi
child.hello();//123456
//第一種方式,冒充物件的方式.(利用js裡的每一個方法名稱都是一個Function物件)
function Parent(username){
this.username = username;
this.say = function(){
alert(this.username);
}
}
function Child(username,password){
this.temp = Parent;//temp指向Parent所指向的地方。 利用js裡的每一個方法名稱都是一個Function物件,指向一個方法。
this.temp(username);//初始化方法裡的內容delete this.temp;//temp沒有用了。可以直接刪除掉.this不可以丟了//Parent(username);//這樣寫表面看起來是正確的,其實是錯的。因為只有new出來的物件才有this,所以呼叫Parent裡的this就沒有值了this.password = password;
this.hello = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
parent.say();//zhangsan
var child = new Child("lisi","123456");
child.say();//lisi
child.hello();//123456
2.第二種方式:call()函數方式call()函數是Function物件的一個函數具體用法如下Java程式碼//call()函數是Function物件的一個函數//具體用法如function test(str){
alert(this.username + "," + str);
}
var o = new Object();
o.username = "zhangsan";
test.call(o,"123456");//zhangsan,123456 .因為每個Function 物件都有一個call()方法,而函數名稱就是一個Function物件.call()函數的第一個參數是test函數裡的this.
//call()函數是Function物件的一個函數//具體用法如function test(str){
alert(this.username + "," + str);
}
var o = new Object();
o.username = "zhangsan";
test.call(o,"123456");//zhangsan,123456 .因為每個Function 物件都有一個call()方法,而函數名稱就是一個Function物件.call()函數的第一個參數是test函數裡的this.
Java程式碼function Parent(username){
this.username = username;
this.say = function(){
alert(this.username);
}
}
function Child(username,password){
Parent.call(this,username);
this.password = password;
this.hello = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
parent.say();//zhangsan
var child = new Child("lisi","123456");
child.say();//lisi
child.hello();//123456
function Parent(username){
this.username = username;
this.say = function(){
alert(this.username);
}
}
function Child(username,password){
Parent.call(this,username);
this.password = password;
this.hello = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
parent.say();//zhangsan
var child = new Child("lisi","123456");
child.say();//lisi
child.hello();//123456
3.第三種實作方式:apply()函數方式apply()和call()是一樣的,只不過參數傳遞不同而已,apply的參數為數組Java程式碼//第三種實作方式:apply()函數方式,apply()和call()是一樣的,只不過參數傳遞不同而已,apply的參數為數組//所以繼承可以這樣實作function Parent(username){
this.username = username;
this.say = function(){
alert(this.username);
}
}
function Child(username,password){
Parent.apply(this,new Array(username));
this.password = password;
this.hello = function(){
alert(this.password);
}
}
var parent = new Parent("zhangsan");
parent.say();//zhangsan
var child = new Child("lisi","123456");
child.say();//lisi
child.hello();//123456