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方法