首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

call,apply用法解决方法

2012-02-17 
call,apply用法scripttype text/javascript //定义一个函数func1,具有属性p和方法Afunctionfunc1(){t

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

热点排行