资源描述:
《javascript技术难点之apply,call与this之间的衔接_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Javascript技术难点之apply,call与this之间的衔接1.apply定义apply:调用函数,并用指定对象替换函数的this值,同时用指定数组替换函数的参数。语法:apply([thisObjt,argArray]])thisObj口J选。要用作this对象的对象。argArray可选。要传递到函数的一组参数。2.call定义call:调用一个对象的方法,用另一个对象替换当前对象。语法:call([thisObj[,argl[,arg2[,[,argN]]]]])thisObj可选。将作为当前对象使用的对象。argl,arg2,,argN可选。将被传递到该
2、方法的参数列表。3.二者区别call的第二个参数可以是任意类型,[ft'apply的第二个参数必须是数组,也可以是argumentso定义也是有差别的。4.实例分析(1)官方实例:functioncallMe(argl,arg2){〃〃vars=;s+二"thisvalue:"+this;s+二〃〈br/>〃;for(iincallMe.argumcnts){s+=z,argumcnts:"+callMe.argumcnts[i];s+二,z
";}returns;}document.write("'Origineilfunction:〈br/>〃);docume
3、nt.write(callMe(1,2));document・write("〈br/>〃);document.write(“Functioncalledwithapply:
,z);document,write(calIMe.apply(3,[4,5]));document,write(callMe.call(3,4,5));//Output://Originalfunction://thisvalue:[objectWindow]//arguments:1//arguments:2//Functioncalledwithapply://thisvalue:3//
4、arguments:4//arguments:5第一个用apply的:定义:调用函数,并用指定对象替换函数的this值调用函数callMe,使用指定的对象3替换callMe函数中的this,这时候这里的this就从之前的[objectWindow]变成了3。第一个用call的:定义:调用一个对象的方法,用另一个对象替换当前对象。调用对象callMe的方法,用另一个对象3替换callMe中的对象。从这些结果分析中可以看出,这两者都是使用指定的对象中的对象或者指定的值改变了对象中的thiso也叮以说:是一个函数中的对彖(this)"劫持〃了另一个要执行函数小的对彖(this)
5、。其实这里引出了一个问题:this到底是啥?为何如此重要的一次次来费劲心思的来改变它的指向?传送门:javascript技术难点(三)之this、new、apply和call详解(这里面说的很棒,绝对够你喝一壶)(2)实例:functionzqz(a,b){returnalert(a+b);}functionzqzl(a,b){zqz.apply(zqzl,[a,b])}zqz_l(1,2)//->3分析:根据定义:调用函数,并用指定对彖替换函数的this值,这里调用函数zqz,并用指定的对象zqz_l替换zqz函数的Ihis值。要注意js中的函数名其实是对象,因为函数名
6、是对Funtion对象的引用!functionadd(a,b)alert(a+b);}functionsub(a,b){alert(a-b);}add.cal1(sub,3,1);//4分析:根据定义:调用一个对彖的方法,用另一个对彖替换当前对彖。这里就是调用对象add的方法,并用add对象替换当前对象sub;再来一个例子:functionzqz(a,b){this・name=a;this.age=b;alert(this.name+""+this.age);}functionzqz_l(a,b){zqz.apply(this,[a,b])//我们亦可以这么写zqz.ap
7、ply(this,arguments)}zqz_l(〃Nic〃,12)//Nic12分析:根据定义:调用函数,并用指定对象替换函数的this值,这里调用函数zqz,使用指定的对象this替换函数zqz的this。再来一个例子:〈inputtype二〃text"id二〃myText"value二"inputtext〃>functionObj(){this,value二〃对象!“;}varvalue二〃global变量〃;functionFunl(){alert(this,value);}Funl();//global变量Funl