本文详细总结了js中apply方法的使用。有需要的朋友可以过来参考一下,希望能帮到你。
1、对象的继承,一般的做法是复制:Object.extend
prototype.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)