本文详细总结了js中apply方法的使用。有需要的朋友可以过来参考一下,希望能帮到你。
1、对象的继承,一般的做法是复制:Object.extendprototype.js通过复制如下代码实现:object . extend=function(destination,source){ for(property in source){ destination[property]=source[property];}返回目的地;}除此之外,还有一个方法,就是:Function.apply(当然也可以用Function.call)
Apply方法可以劫持另一个对象的方法并继承另一个对象的属性。
Function.apply(obj,args)方法可以接收两个参数。
obj:此对象将替换函数类中的此对象。
args:这是一个数组,将作为参数传递给函数(args-arguments)。
应用示例代码如下:复制代码代码如下:脚本函数person (name,age){//定义一个类,human this.name=name//名字this.age=age//age this . say hello=function(){ alert(' hello ')};} function Print(){ //显示类this.funcName='Print '的属性;this . show=function(){ var msg=[];for(var key in this){ if(type of(this[key])!='function'){ msg.push([key,':',this[key]]。join(“”);} } alert(msg . join('));};}函数student(姓名,年龄,年级,学校){//学生类Person.apply(this,arguments);Print.apply(this,arguments);this.grade=年级;//grade this . school=school;//school } var P1=新人(' jake ',10);P1 . say hello();Var=新生(' Tom ',13,6,'清华小学');S1 . show();S1 . say hello();alert(S1 . funcname);/script student类本来没有任何方法,但是在Person.apply(this,arguments)之后,
他有sayhello方法和Person类的所有属性。
show()方法是在Print.apply(this,arguments)之后自动获得的。
2、利用Apply的参数数组化来提高
Function.apply()提高程序性能的技巧
让我们从Math.max()函数开始。Math.max后面可以跟任何参数,最后返回所有参数的最大值。
例如alert (math.max (5,8))//8alert (math.max (5,7,9,3,1,6))//9
但在很多情况下,我们需要找到数组中最大的元素。复制代码代码如下:var arr=[5,7,9,1]alert(math . max(arr))//这样不行。一定要这样写。
函数get max(arr){ var arr len=arr . length;for(var i=0,ret=arr[0];iarrLeni ){ ret=Math.max(ret,arr[I]);ret返回;}这样写很麻烦,效率很低。如果用apply,看代码:复制代码如下:function get max 2(arr){ return math . max . apply(null,arr);}两段代码达到了同样的目的,但是getMax2优雅、高效、简洁得多。
比如数组的push方法。var arr1=[1,3,4];var arr2=[3,4,5];
如果我们要把arr2展开,然后一个一个加到arr1上,最后让ARR1=[1,3,4,3,4,5] ARR1。Push (ARR2)显然不行。因为这样做会得到[1,3,4,[3,4,5]]
我们只能用一个循环来逐个推送(当然也可以用arr1.concat(arr2),但是concat方法并不改变arr1本身)。复制代码代码如下:var arr len=arr 2 . length for(var I=0;iarrLenI){ arr 1 . push(arr 2[I]);}自从Apply之后,事情就变得这么简单array . prototype . push . Apply(arr 1,arr2)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。