日期:2014-05-16  浏览次数:20343 次

JS中apply与call的区别

function cls1()
{
  this.a='123';
}

function cls2()
{
  this.a='456';
}

cls1.prototype.fun1=function()
{
  alert(this.a);
}

cls1.prototype.fun2 = function(s){
alert("this.a : " + this.a + " s:" + s);
}

cls1.prototype.fun3 = function(p1, p2, p3)
{
  alert("this.a : "+ this.a + " p1:" + p1 + " p2:"+ p2 + " p3:"+p3);
}

var o1=new cls1();
var o2=new cls2();
//o1.fun1.call(o2);
//o1.fun1.apply(o2);

//o1.fun2.apply(o2, 'test');// 错误
o1.fun2.apply(o2, ['test']);// 正确
o1.fun2.call(o2, 'test');// 正确 与上边一样

var array = new Array('a','b','c');
o1.fun3.apply(o2, array); // 正确
//o1.fun3.apply(o2, 'a','b','c') // 错误
o1.fun3.call(o2, 'a', 'b', 'c'); // 正确
//o1.fun3.clall(o2, array); // 错误