Array.apply(null, {length: 5}) - 2018-05-22

  • 2018-05-22 创建

先说结果:

Array.apply(null, {length:5}) //返回[undefined, undefined, undefined, undefined, undefined]

Array.apply(null, {length: 5}) length为特殊字段,意思是生成一个长度为5的数组,由于没赋值,所以都是undefined.
和ES6的Array.from有点类似, Array.from

apply()

apply() 的第一个参数是对象,第二个参数是数组,作为参数列表。

然后其实第二个参数只要是个类数组对象就可以了,比如 {length: 5} 就可以看作一个类数组对象,长度是 5.

所以

Array.apply(null, { length: 5}) 

相当于

Array(undefined, undefined, undefined, undefined, undefined)

call() , apply()

进一步, 实际 这个 和 Array 没有任何关系,只是碰巧使用 Array 时遇到了。

我觉得这个问题应该从 Function.callFunction.apply 来入手。
这两个 函数的方法 功能都是一样的,都是为了改变 this 的指向。
唯一的区别就是参数不一样,apply的第二个参数必须传入数组。

for example
首先定义个 iAmArray 函数:

var iAmArray = function(){
    return arguments;
};

这里不用管this,下面是正常调用它的三种方式:

//普通写法
iAmArray(1,2,3);
/*
    [1, 2, 3]
*/

//call写法
iAmArray.call(null,1,2,3);
/*
    [1, 2, 3]
*/

//apply写法
iAmArray.apply(null,[1,2,3]);
/*
    [1, 2, 3]
*/

apply方式调用时,只要是 Object,还有length,它就当作类数组处理了,实际和 Array 没有任何关系,任何函数都会这样。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,268评论 0 4
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,827评论 2 17
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,195评论 0 13
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,635评论 0 5
  • 曾经为了爱而不得的人而疯狂, 爱情如手中沙握不住也放不下! 我们孤独恐惧忧伤拒绝成长, 灵魂经历过岁月荡涤苦难磨砺...
    画心心语阅读 520评论 3 4