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(
"WEB开发"
,28,
"男"
);
20.
test.alertName();
//WEB开发
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(
"WEB开发"
,28,
"男"
);
17.
test.alertName();
//WEB开发
18.
test.alertAge();
//28
19.
test.alertSex();
//男