`Array.prototype.slice.call` 是如何工作的?

2024-01-30

我知道它是用来做arguments a real Array,但我不明白使用时会发生什么Array.prototype.slice.call(arguments);.


幕后发生的事情是当.slice()通常被调用,this是一个数组,然后它只是迭代该数组,并完成其工作。

How is this in the .slice()函数数组?因为当你这样做时:

object.method();

...the object自动变为的值this in the method()。所以:

[1,2,3].slice()

...the [1,2,3]数组被设置为值this in .slice().


但是如果你可以用其他东西代替呢?this价值?只要你替换的内容有数字.length属性,以及一堆数字索引的属性,它应该可以工作。这种类型的对象通常称为类似数组的对象.

The .call() and .apply()方法让你manually设置值this在一个函数中。所以如果我们设置的值this in .slice() to an 类似数组的对象, .slice()只会assume它正在使用一个数组,并且会做它的事情。

以这个普通对象为例。

var my_object = {
    '0': 'zero',
    '1': 'one',
    '2': 'two',
    '3': 'three',
    '4': 'four',
    length: 5
};

这显然不是一个数组,但是如果你可以将它设置为this的价值.slice(),那么它就会起作用,因为它看起来足够像一个数组.slice()才能正常工作。

var sliced = Array.prototype.slice.call( my_object, 3 );

Example: http://jsfiddle.net/wSvkv/ http://jsfiddle.net/wSvkv/

正如你在控制台中看到的,结果正是我们所期望的:

['three','four'];

这就是当您设置arguments对象作为this的价值.slice()。因为arguments has a .length属性和一堆数字索引,.slice()就像在真正的数组上一样进行工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

`Array.prototype.slice.call` 是如何工作的? 的相关文章

  • 在 HTML5 中使用 JS 创建内联 SVG

    我正在使用本地 HTML5 文件 它有在顶部 我在里面放了这样的东西
  • 执行页面的 javascript 后保存页面的 html 输出

    我正在尝试抓取一个网站 它首先加载 html js 使用js修改表单输入字段 然后使用POST 如何获得 POSTed 页面的最终 html 输出 我尝试使用 phantomjs 执行此操作 但它似乎只有渲染图像文件的选项 谷歌搜索表明这应
  • 在 Angular 单元测试中应该如何处理运行块?

    我的理解是 当您在 Angular 单元测试中加载模块时 run块被调用 我认为如果你正在测试一个组件 你不会想同时测试run块 因为unit测试应该只是测试一个unit 真的吗 如果是的话有什么办法可以防止run阻止运行 我的研究让我认为
  • 向 JS 计算器添加键盘支持时出现的问题

    我想为我的计算器添加键盘支持 当我用键盘按下操作 即 或 时 js将其视为数字 而不是操作 例如 当我通过点击计算 10 11 时 我将得到 21 作为结果 当我通过键盘输入时 我会得到 10 为什么会发生这种情况 是否可以改变它 div
  • Visual Studio IDE 中功能后的空间

    如何设置 Visual Studio 中的设计以在我的 javascript 函数后面放置一个空格 目前 当我按下返回键时 我得到了这个 var myfunc function 当我想要这个的时候 var myfunc function 知
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • 如何使用 Retrofit 解析嵌套 json....?

    我不知道该怎么办使用 Retrofit 解析 json 熟悉使用 Retrofit 解析简单的 json 但不熟悉解析嵌套Json using Retrofit 这是我的 Json 数据 current observation image
  • 在 C# 中按元素相乘数组具有意想不到的性能

    我想找到按元素相乘两个数组的最佳方法 这是更广泛项目的一部分 其中性能而不是唯一的考虑因素 我今天开始用 C Linqpad 编写一些函数 因此它还没有以任何方式进行优化 下面代码的输出如下 Environment ProcessorCou
  • SVG 中三角形的圆角

    我正在尝试制作一个具有圆角的三角形 三角形将如下所示 左下角是唯一看起来相当容易制作的角 主要是因为这是一个 90 度的 转弯 该转弯是使用QSVG 中的命令具有以下参数 Q x y height x y height RADIUS从我正在
  • Famo.us 滚动视图高度

    我正在尝试使用著名的顺序布局在滚动视图下方添加图像 但滚动视图的高度有问题 这就是我创建滚动视图的方式 var scrollview new Scrollview direction Utility Direction X options
  • 异或交换可以扩展到两个以上的变量吗?

    我一直在尝试将异或交换扩展到两个以上的变量 例如n变量 但我没有得到比这更好的地方3 n 1 对于两个整型变量x1 and x2你可以像这样交换它们 swap x1 x2 x1 x1 x2 x2 x1 x2 x1 x1 x2 所以 假设你有
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 大型应用的回流/布局性能

    我正在使用 GWT 构建一个 HTML 应用程序 其性能总体上是正确的 有时 它会加载 DOM 中的许多对象 并且应用程序会变得很慢 我使用 Chrome 开发者工具分析器来查看时间花在哪里 在 Chrome 下 一旦应用程序被编译 即没有
  • 如何上传文件 - sails.js

    我可以下载图像和 pdf 但无法下载文档文件 doc pptx odt 下载文档 doc pptx odt 时 仅将其下载为 ZIP XML 文件 我可以做什么 我在用着 填写上传文件文档 https github com balderda
  • 当选项卡重新加载(chrome 扩展)时,如何运行此脚本?

    所以我想在指定 URL 中重新加载选项卡时运行脚本 它几乎可以工作 但实际上 id 不能 这是我的清单文件 manifest version 2 name Sample Extension description Sample Chrome
  • Morgan Logger + Express.js:写入文件并在控制台中显示

    我正在尝试将 Morgan 与 Express js 结合使用来编写日志文件 同时也在控制台上显示我的日志 我正在使用这段代码 var logger require morgan var accessLogStream fs createW
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • 指定在任何 Jest 设置发生之前运行的代码

    tl dr 是 1 我怎样才能让Jest使用原生的require函数可以在任何地方加载我的测试中的所有模块 2 我将在哪里 如何进行修改 即替换为esm加载程序 https github com standard things esm ht
  • R闪亮:使用闪亮的JS从数据表中获取信息

    我想读出所有列名称以及它们在数据表中显示的顺序 由于不同的原因 我无法使用 stateSave 等选项 我对 JS 没有什么把握 但我确信用它可以完成 所以我需要你帮助我 我尝试过类似的代码片段 datatable data callbac

随机推荐

  • Directory.Move 子文件夹和父文件夹时 IOException 访问被拒绝

    我正在尝试重命名具有子文件夹的多个文件夹 但是当我在子文件夹上使用 Directory Move 时 父文件夹似乎被锁定 My code var pathParent D test f1 var pathSub D test f1 f2 v
  • Android SensorManager 中的 getSensorList() 与 getDefaultSensor()

    我正在为 Android 编写一个游戏 希望能够使用加速度计进行输入 我看到有两种获取传感器的方法 一种方法是使用第一个元素SensorManager getSensorList Sensor TYPE ACCELEROMETER 另一个是
  • ASP 文件上传静默失败

    我在使用 FileUpload 处理大文件时遇到问题 如果我上传一个小文件 10kB 它工作得很好 上传大文件 60MB 不会引发异常 它只是重新加载页面 在有人问之前
  • 如何从 R 中的 ols 对象中提取斜率的 p 值

    If I do data mtcars m1 lt lm mpg cyl data mtcars x TRUE y TRUE 然后我可以使用提取斜率的 p 值summary m1 coefficients 2 4 但如果我这样做 libra
  • 从 GitHub 上托管的存储库的多个分支获取提交

    我想使用 RSS 源显示托管在 GitHub 上的存储库上的提交活动 我正在使用网址 https github com RiverDonkey Drupal Mailcheck commits atom 但问题是这将导致仅从基础分支 在本例
  • 如何在 PyCharm 中下载文件而不是 Colab 中的 !wget? [复制]

    这个问题在这里已经有答案了 当我在pandas中尝试一些代码时 bash代码wget在colab中使用如下 import pandas as pd wget abc com sales csv 如果我想使用 PyCharm 下载上述互联网文
  • 如何用AJAX和MVC实现文件下载

    我想通过使用 jQuery AJAX 调用和 MVC 下的一些参数来提供文件下载操作 Example javascript function DoDownload startDate ajax url controller GetFile
  • 在选定文本周围插入标签

    我环顾四周 但其他答案并没有真正帮助我 我想创建一个小型所见即所得编辑器 只需要有添加链接和添加列表的选项 我的问题是 当单击链接 按钮之一 例如 添加链接 时 如何在文本区域中的选定文本周围附加标签 我已经编写了一个 jQuery 插件来
  • JMeter 将变量设置为随机选项

    我一直在使用 JMeter 我知道 Random and RandomString功能 我需要选择一个随机选项并将其存储在变量中 因为它将用作多个调用的参数路径的一部分 例如 http www example com pets random
  • 模块构建失败:错误:`sass-loader` 需要 `node-sass` >=4。请安装兼容版本

    你能帮助我吗 当我点击 ng s 时出现此错误 ERROR in src styles scss node modules raw loader node modules postcss loader lib embedded node m
  • 未知函数断言失败

    我正在使用这个程序来读取和显示图像 我不知道为什么它显示这个奇怪的错误 断言失败 scn 3 scn 4 在未知函数中 文件 src modules imgproc src color cpp第3326行 我更改了一些图像 有时它运行时没有
  • MySQL CREATE TABLE 语句中的主键定义

    这段代码有什么区别 CREATE TABLE samples sampleid INT 11 NOT NULL AUTO INCREMENT sampledate DATE NOT NULL location VARCHAR 25 NOT
  • 如何为 traefik 启用 logrotation?

    如何启用日志文件的日志轮转 例如访问日志 这是内置的吗 文档只说 这允许日志由外部程序轮换和处理 例如 logrotate 如果你正在跑步Traefik in a Docker容器然后你可以做这样的事情 检查 Docker 主机上是否安装了
  • 在Python中查找两个等值线图的交集

    我想知道是否有人可以给我找到两个等高线图交集的线索 理想情况下 它将采用一对轮廓 然后返回交点的坐标 Z1 somefunction Z2 somefunction1 Z3 somefunction2 xlist np linspace 0
  • Django allauth 示例 [Errno 61] 连接被拒绝

    当我运行 django allauth example 并尝试发送电子邮件时出现以下错误 File System Library Frameworks Python framework Versions 2 7 lib python2 7
  • 如何在 Matlab 中更新 scatter3 图(循环)

    这是一个非常简单的问题 但在网上找不到答案 我想可视化从激光雷达收集的点云 我可以绘制各个帧 但想循环它们以创建 动画 我知道如何使用 Drawingow 处理正常绘图 但无法使用 scatter3 处理它 如果我只是像在注释代码中所做的那
  • 如何检测有人摇晃 iPhone?

    我想在有人摇晃 iPhone 时做出反应 我并不特别关心他们如何摇动它 只是在瞬间用力挥动它 有谁知道如何检测这个 在 3 0 中 现在有一种更简单的方法 挂钩新的运动事件 主要技巧是您需要有一些 UIView 不是 UIViewContr
  • 将 box-shadow 设置为一组 HTML 元素

    我有两个元素 它们的侧面相互接触 它们的接触面具有不同的尺寸 尺寸 它们都需要在下面有一个阴影 问题是其中一个阴影总是覆盖其同级元素 我可以玩z index但这只是意味着我将选择两者中的哪一个将被兄弟姐妹的阴影覆盖 如果可以向一组元素添加阴
  • 设计 WPF 地图控件

    我正在考虑在 WPF 中制作一个简单的地图控件 并且正在考虑基本地图界面的设计 并且想知道是否有人对此有一些好的建议 我想到的是使用 ScrollViewer 无滚动条 作为我的 视图端口 然后将所有内容堆叠在画布上 从 Z Index 0
  • `Array.prototype.slice.call` 是如何工作的?

    我知道它是用来做arguments a real Array 但我不明白使用时会发生什么Array prototype slice call arguments 幕后发生的事情是当 slice 通常被调用 this是一个数组 然后它只是迭代