首頁 >web前端 >js教程 >js中apply方法的使用詳細解析_javascript技巧

js中apply方法的使用詳細解析_javascript技巧

WBOY
WBOY原創
2016-05-16 17:17:451012瀏覽

1、物件的繼承,一般的做法是複製:Object.extend
prototype.js的實作方式是:

複製程式碼 程式碼如下:

Object.extend = function(destination, source) {
   ] = source[property];
    }
    return destination;
}

除此之外,還有種方法,就是:Function.apply(當然使用Function. call也是可以的)
apply方法能劫持另外一個物件的方法,繼承另外一個物件的屬性

Function.apply(obj,args)方法能接收兩個參數

obj:這個物件將取代Function類別裡this物件

args:這個是數組,它將作為參數傳給Function(args-->arguments)

apply示範程式碼如下:


複製程式碼 程式碼如下:

程式碼如下:


<script> 🎜>function Person(name,age){   //定義一個類別,人類  <BR>    this.name=name;     //名字  <BR>   ){alert("hello")};<BR>} <BR>function Print(){            //顯示類別中的屬性<BR>    .( <BR>        var msg=[];<BR>        for(var key in this){ <BR>               msg.push([key," :",this[key]].join(""));<BR>            }<BR>        }  <BR> function Student(name,age,grade,school){    //學生類別<BR>    Person.apply(this,arguments);<BR>    Print.apply    / /年級<BR>    this.school=school;                 //學校<BR>} <BR>var p1=new Person("jake",10); Student("tom",13,6,"清華小學");<BR>s1.show();<BR>s1.sayhello();<BR>alert(s1.funcName);<BR></script>


學生類別本來不具備任何方法,但是在Person.apply(this,arguments)後,

他就具備了Person類別的sayhello方法和所有屬性。

在Print.apply(this,arguments)後就自動得到了show()方法

2、利用Apply的參數陣列化來提升

Function.apply()在提升程式效能方面的技巧

我們先從Math.max()函數說起,Math.max後面可以接任意個參數,最後回傳所有參數中的最大值。

alert(Math.max(5,8))   //8

alert(Math.max(5,7,9,3,1,6))   //9

但是在很多情況下,我們需要找出陣列中最大的元素。



複製程式碼


程式碼如下:

    for(var i=0,ret=arr[0]; max(ret,arr[i]);      
    }
    return ret;
}


這樣寫麻煩且低效。如果用apply呢,看程式碼:




複製程式碼


程式碼如下:
function getMax2(arrunction ){    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]]

我們只能用一個循環去一個一個的push(當然也可以用arr1.concat(arr2),但是concat方法並沒有改變arr1本身)

複製程式碼 程式碼如下:

var arrLen=arr2.length
for(var i=0;iarr  1 .push(arr2[i]);
}

自從有了Apply,事情就變得如此簡單
Array.prototype.push.apply(arr1,arr2)
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn