• 转 javascript方法apply()


    xxxxBW

     

     

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

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

     
    标签: javascript
    好文要顶 关注我 收藏该文  
    2
    0
     
     
     
    « 上一篇: 图片排列显示
    » 下一篇: javascript方法--call()
    posted @ 2015-10-12 17:46  xxxxBW  阅读(996)  评论(1)  编辑  收藏  举报
  • 相关阅读:
    Docker 相关资源
    ReferenceFinder 学习
    AssetBundle 复习
    Coroutine 复习
    Unreal 相关资源
    Houdini 相关资源
    MySQL多数据库合并到一个数据库
    Module is not specified
    idea导入多maven项目
    redis-cluster部署遇到为问题记录
  • 原文地址:https://www.cnblogs.com/effortandluck/p/16413767.html
Copyright © 2020-2023  润新知