javascript方法--apply()

今天琢磨了一下apply,之前對這個方法以爲比較懵,今天一琢磨確實以爲挺好玩的。數組

一開始把MDN的apply文檔看了一遍,感受不是很理解,並且有一些東西也是知道可是比較模糊,因此仍是一步一步來,不懂查查文檔,因而乎,來講一下理解順序~app

 

首先,要先理解一下兩個概念,constructor 和 prototype函數

constructor學習

解釋:this

這個屬性能夠找到對象的構造函數spa

prototypeprototype

解釋:code

能夠添加對象的屬性和方法對象

使用該屬性給構造函數添加屬性或方法時,繼承自該構造函數的新對象也會有該屬性或方法blog

新對象會擁有新增方法或屬性,可是打印出原構造函數是不變的,訪問構造函數的新增屬性或方法也是沒有的

 

接着,來學習一個建立對象的方法

Object.create(proto,[,arguments])
解釋:
建立一個指定原型和若干指定屬性的對象
proto必定要是要是原型,而不是函數,否則的話繼承到的原型就是Function
第二個參數是可選的,不包含對象上原型鏈上的屬性
對於第二個參數是傳入的屬性,要注意這個參數的格式,該參數是一個對象,有名稱和屬性,屬性要用對象的格式拼寫,以下
1 var myObject = { 2     "a":{ 3  
4  }, 5     "b":{ 6         value:11
7  } 8 } 9    

 

最後,就是apply方法啦

fun.apply(this,[array])

解釋:

讓fun函數在this做用域下運行,array則做爲參數傳給fun函數

當this爲null或underfined時,默認指定全局對象

apply會把array轉化爲也參數列表

 

利用apply實現高效率

1.求數組中的最小項
Math.min.apply(null,array);
1 Math.min([1,2,3]);//不容許
2 Math.min(1,2,3);//容許
利用apply會把傳入的數組轉化爲參數列表,就能夠輕易得出數組中的最小值
1 Math.min.apply(null,[array]);//求數組中的最小值,null是在全局環境下
同理,求數組中的最大值也是能夠用這種方法
 
2.實現數組的拼接
Array.prototype.push.apply(array1,array2);
數組的拼接一樣是利用了apply會把傳入的數組轉化爲參數列表這個特性,由於push會將數組做爲一個元素添加到數組中
1 var array1 = [1,2]; 2 var array2 = [3,4]; 3 array1.push(5,6);//[1,2,5,6]
4 array1.push([7,8]);//[1,2,5,6,[7,8]]
5 
6 Array.prototype.push.apply(array1,array2);//[1,2,5,6,[7,8],3,4]

 

apply的知識點就總結完啦~不過仍是要多實踐,一開始的時候我仍是會搞錯,因此仍是要理論結合實際~

注:但願你們多給意見哈,謝謝~

相關文章
相關標籤/搜索