javascript当中call()和apply()用法
call()和apply()
马克-to-win:call是在特定的作用域中调用函数。
例 3.13.1
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>
</title>
<script type="text/javascript">
function A(name) {
this.name = name;
}
A.prototype.info = function()
{
/*如果下局解开屏蔽,最后结果则打印出就为A,结论就是在call时,先在A里找this.name,如果找不着,则用b环境里找,现在A的构造函数从来没有执行过,所以最后用的是B环境的name,见下一个例子*/
//this.name="A";
return "A的名字是 "+this.name;
}
function B(agev) {
this.age=agev;
this.name="I am B"
}
var b = new B(2);
var tmp =A.prototype.info;
document.writeln(tmp.call(b));
var zhanwei="zhanwei";
</script>
</head>
<body>
输出结果:
A的名字是 I am B
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>
</title>
<script type="text/javascript">
function A(name,col) {
/*实参一个,但形参2个,所以最后一个参数color为undefined,id和name都有,所以是把B给冲了的,但age是用了B的*/
this.color=col;
this.id="a";
this.name = name;
return "A(name) 名字是 "+this.id+this.name+this.age+this.color;
}
A.prototype.info = function()
{
return "名字是 "+this.name;
}
A.prototype.country = "China";
function B(agev) {
this.id="b";
this.age=agev;
this.name="this is B"
}
var b = new B(2);
document.writeln(A.call(b, "马克-to-win"));
var zhanwei="zhanwei";
</script>
</head>
<body>
结果:
A(name) 名字是 a马克-to-win2undefined
例 3.13.2
<script>
/*
他们的用途相同,都是在特定的作用域中调用函数。screenX是window的一个field。
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。
call()方法第一个参数与apply()方法相同,但传递给函数的参数必须列举出来。 */
function sum(num1, num2) {
return screenX+num1 + num2;
}
document.writeln(screenX+" is screenX");
document.writeln(sum.call(window, 10, 10)); //20+screenX
document.writeln(sum.apply(window,[10,20])); //30+screenX
</script>
输出结果:
-4 is screenX 16 26