最近在读《ES6标准入门》这本书,无意间看到下面这段代码:

// Array.of()方法可以用下面的代码模拟实现。
function ArrayOf(){return [].slice.call(arguments);
}

不太理解这段代码的原理,于是觉得弄清楚到底是怎么做到的

首先弄清楚slice方法

slice() 方法返回一个新的数组对象,一个由 begin 和 end 决定的原数组的浅拷贝

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

可能我对于slice方法只理解到了这一层,所以我不明白上面代码为什么能实现
于是,在MDN上,我找到了下面的内容

看到这里谜团也就解开了,

数组slice方法还有另外一个作用,就是将类数组对象转换成数组,但是要将方法通过call()的方式绑定到 类数组对象 上

[].slice.call(arguments)模拟实现 Array.of相关推荐

  1. Array.prototype.slice.apply(arguments)和[].slice.apply(arguments)解析

    我们知道,函数内部 arguments 是一个类数组对象,不是真正的数组,因此也无法使用数组的各种方法.想详细了解 argument 对象可以前往函数中的 arguments. (function f ...

  2. [].shift.call( arguments ) 和 [].slice.call( arguments ) 解释

    经典的 [].slice.call( arguments ) 关于这个的解释网上有很多,大多是 "把类数组对象转为数组对象".确实这是我们想要实现的功能! 但这仅仅是说明了结果并没 ...

  3. [转载]Array.prototype.slice.call(arguments,1)原理

    Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上 ...

  4. js Array.prototype.slice.call(arguments,0) 理解

    Array.prototype.slice.call(arguments,0) 经常会看到这段代码用来处理函数的参数 网上很多复制粘帖说:Array.prototype.slice.call(argu ...

  5. Array.prototype.slice.call(arguments)

    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与co ...

  6. 详解 Array.prototype.slice.call(arguments)

    首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是 ...

  7. [转] 理解 JavaScript 中的 Array.prototype.slice.apply(arguments)

    假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理 ...

  8. Array.prototype.slice.call(arguments,0); 上下调用模型

    var fn9 = (function () {var arr = {}; //缓存对象var counter = function (arr) { //计算函数//args也就是fn9(1, 2, ...

  9. JS之函数实际参数转换成数组的方法[].slice.call(arguments)

    实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组. 我们可以通 ...

最新文章

  1. strapi 开源api 内容管理平台试用
  2. 2020-10-29(Android 的DEX ,ODEX,ELF )
  3. 全球及中国汽车物流行业未来发展方向与投资机遇研究报告2022版
  4. 启明云端分享|ESP32-S3一颗融合AI和IOT于一体的芯片,到底有哪些功能!能应用在哪些场景呢
  5. 成吉思汗:“世界之鞭”还是“人类之王”?
  6. 数据库Sqlite3
  7. SpringCloud工作笔记056---mysql自增序列管理表_自增序列函数创建
  8. 甘特图制作_使用excel制作甘特图其实很简单,仅需4步搞定,项目进度一目了然...
  9. 【完美解决】arcgis engine 10.0 for cross platform C++ 在visual studio2010上编译的AE程序 的License无法初始化错误。...
  10. 循环神经(LSTM)网络学习总结
  11. (九)洞悉linux下的Netfilteriptables:网络地址转换原理之DNAT
  12. FOC电机控制之SVPWM原理与实现
  13. 汽车营销与保险【1】
  14. 论文排版一步搞定之公式——(公式居中,编号居右)
  15. 你真的会写for循环吗?来看看这些常见的for循环优化方式
  16. 我做过的本职之外的事情
  17. 403forbiden解决
  18. 普通话转换成方言的语音识别方法
  19. 做强信息产业 拓宽智慧城市发展路径
  20. Java开发 - 消息队列之RabbitMQ初体验

热门文章

  1. 在mac中导入hadoop2.6.0源代码至eclipse
  2. 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
  3. TensorFlow学习笔记(二十八)CNN的9大模型之AlexNet
  4. Keras笔记(一)一些基本概念
  5. [阿里]基于多任务学习的CVR预估模型ESM2
  6. 机器学习实战:使用lightGBM预测饭店流量
  7. outlook错配置账户到exchange后的删除办法
  8. 圆方圆学院零基础入门学习Python(绝对干货,值得学习)
  9. 远程阿里云window服务器报错身份验证错误
  10. 解决popup不随着window一起移动的问题