javascript方法--apply()

今天琢磨了一下apply,以前对这个方法觉得比较懵,今天一琢磨确实觉得挺好玩的。

一开始把MDN的apply文档看了一遍,感觉不是很理解,而且有一些东西也是知道但是比较模糊,所以还是一步一步来,不懂查查文档,于是乎,来说一下理解顺序~

 

首先,要先理解一下两个概念,constructor 和 prototype

constructor

解释:

这个属性可以找到对象的构造函数

prototype

解释:

可以添加对象的属性和方法

使用该属性给构造函数添加属性或方法时,继承自该构造函数的新对象也会有该属性或方法

新对象会拥有新增方法或属性,但是打印出原构造函数是不变的,访问构造函数的新增属性或方法也是没有的

 

接着,来学习一个创建对象的方法

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的知识点就总结完啦~不过还是要多实践,一开始的时候我还是会搞错,所以还是要理论结合实际~

注:希望大家多给意见哈,谢谢~

posted @ 2015-10-12 17:46  xxxxBW  阅读(1077)  评论(1编辑  收藏  举报