对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数必须是一个对象,但对第二个参数:apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
语法:B.方法名.call(A,var1,var2,var3)
B.方法名.apply(A,[var1,var2,var3])
含义:A对象调用B对象的某个方法,A对象可以没有定义B对象要调用的那个方法,参数表示方法名所使用的参数。
样例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<html>
<head>
<meta http-equiv=
"Content-Type"
content=
"text/html; charset=utf-8"
>
<title>DojoSample1</title>
<script type=
"text/javascript"
src=
"dojo.js"
></script>
<script language=
"javascript"
>
function
Dog(sound){
this
.sound = sound;
this
.talk =
function
(name){
alert(
"this.soung返回值是:"
+
this
.sound+
";Dog的名字是:"
+name);
}
}
function
Cat(sound){
this
.sound = sound;
this
.talk =
function
(name){
alert(
"this.soung返回值是:"
+
this
.sound+
";Cat的名字是:"
+name);
}
}
var
dog =
new
Dog(
"狗"
);
dog.talk(
"小狗狗"
);
//this.soung返回值是:狗;我的名字是:小狗狗
var
cat =
new
Cat(
"猫"
);
cat.talk(
"小猫猫"
);
//this.soung返回值是:猫;我的名字是:小猫猫
cat.talk.call(dog,
"狗使用猫的方法"
);
//this.soung返回值是:狗;Cat的名字是:狗使用猫的方法
dog.talk.call(cat,
"猫使用狗的方法"
);
//this.soung返回值是:猫;Dog的名字是:猫使用狗的方法
</script>
</head>
<body>
</body>
</html>
|
本文转自stock0991 51CTO博客,原文链接:http://blog.51cto.com/qing0991/1363309
,如需转载请自行联系原作者