使用这两个方法可以像调用其他对象方法一样调用函数。
<html>
<head>
<title>Example-6.10 用call和apply调用函数</title>
</head>
<body>
<script>
<!--
function dwn(s)
{
document.write(s + "<br/>");
}
//定义一个Point类型
function Point(x,y)
{
this.a = x;
this.b = y;
this.toString = function(){
return "(" + [x,y] + ")";
}
}
//定义一个Vector类型
function Vector(x,y)
{
this.a = x;
this.b = y;
this.toString = function(){
return "[" + [x,y] + "]";
}
}
//这个函数将传入的参数累加到对象的x、y属性上
function add(x, y){
return new this.constructor(this.a + x, this.b + y);
}
var p = new Point(1, 2); //经过这个new之后,有了p.a和p.b的值了,而且重写了p.toString的方法。
var v = new Vector(-1, 2); //经过这个new之后,有了v.a和v.b的值了,而且重写了v.toString的方法。
var p1 = add.call(p, 3, 4); //把add函数作为p的方法调用,这个方法执行了add方法,而参数p对象作为了add函数的所有者。
var v1 = add.apply(v, [3,4]); //把add函数作为v的方法调用
dwn(p1);
dwn(v1);
-->
</script>
</body>
</html>
使用call和apply可以无需定义,直接调用一个函数。
运行结果:
(4,6)
[2,6]