網頁制作poluoluo文章簡介:call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。
call 方法
調用一個對象的一個方法,以另一個對象替換當前對象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
參數1:thisObj
可選項。將被用作當前對象的對象。
參數2:arg1, arg2, , argN
可選項。將被傳遞方法參數序列。
說明:
call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。
如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。
看懂了沒?說實話我沒看懂,哈哈,沒看懂繼續往下看。
call 方法在js繼承中經常看到,也一直搞不懂,這到底是什麼東西,看下面這段代碼:
01.function Person(name,age){
02.
this.name = name;
03.
this.age=age;
04.
this.alertName = function(){
05.
alert(this.name);
06.
}
07.
this.alertAge = function(){
08.
alert(this.age);
09.
}
10.
}
11.
12.
function webDever(name,age,sex){
13.
Person.call(this,name,age);
14.
this.sex=sex;
15.
this.alertSex = function(){
16.
alert(this.sex);
17.
}
18.
}
19.
var test= new webDever("愚人碼頭",28,"男");
20.
test.alertName();//愚人碼頭
21.
test.alertAge();//28
22.
test.alertSex();//男
這樣 webDever類就繼承Person了,Person.call(this,name,age) 的 意思就是使用 Person對象代替this對象,那麼 webDever中不就有Person的所有屬性和方法了嗎,test對象就能夠直接調用Person的方法以及屬性了;
說的再明白一點,就是相當於將webDever中的Person.call(this,name,age)這部分代碼替換為Person類的:
1.this.name = name;
2.
this.age=age;
3.
this.alertName = function(){
4.
alert(this.name);
5.
}
6.
this.alertAge = function(){
7.
alert(this.age);
8.
}
這樣webDever類就相當於:
01.
function webDever(name,age,sex){
02.
this.name = name;
03.
this.age=age;
04.
this.alertName = function(){
05.
alert(this.name);
06.
}
07.
this.alertAge = function(){
08.
alert(this.age);
09.
}
10.
11.
this.sex=sex;
12.
this.alertSex = function(){
13.
alert(this.sex);
14.
}
15.
}
16.
var test= new webDever("愚人碼頭",28,"男");
17.
test.alertName();//愚人碼頭
18.
test.alertAge();//28
19.
test.alertSex();//男
不知道能不能這麼理解?望大家斧正。
留一個問題:假設webDever類只要繼承Person類中的alertName方法,這樣可以嗎?代碼應該怎麼寫?