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

call,apply用法
<script   type= "text/javascript ">
//定义一个函数func1,具有属性p和方法A
function   func1(){
            this.p= "func1- ";
            this.A=function(arg){
                        alert(this.p+arg);
            }
}
//定义一个函数func2,具有属性p和方法B
function   func2(){
            this.p= "func2- ";
            this.B=function(arg){
                          alert(this.p+arg);
            }
}
var   obj1=new   func1();
var   obj2=new   func2();

obj1.A( "byA ");         //显示func1-byA
obj2.B( "byB ");         //显示func2-byB
obj1.A.apply(obj2,[ "byA "]);   //显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同
obj2.B.apply(obj1,[ "byB "]);   //显示func1-byB
obj1.A.call(obj2, "byA ");     //显示func2-byA
obj2.B.call(obj1, "byB ");     //显示func1-byB

</script>


----
不明白apply,call到底有社么用,要调用方法的话,下面一样的完成
var   a   =   new   func2();
a.B( "byA ");

另外this指针为什么不是直接显示a   +   byA,而是func2   +   byA

越看越迷糊..

------解决方案--------------------
apply和call都是[调用一个对象的一个方法,以另一个对象替换当前对象。],不同的是它们对参数传递的方式,apply传递的参数是argArray(数组),call传递的是arg1, arg2, , argN (序列)。

楼下补充!
------解决方案--------------------
obj2.B.apply(obj1,[ "byB "]); //显示func1-byB
简而言之,效果就相当于给fun1类添加了一个和fun2类的B方法一样的B方法