使用这两个方法可以像调用其他对象方法一样调用函数。
<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]