栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Array.prototype.slice.call()如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Array.prototype.slice.call()如何工作?

在幕后发生的事情是,当

.slice()
通常被调用时,它
this
是一个数组,然后它仅在该数组上进行迭代并完成其工作。

如何

this
.slice()
功能的阵列?因为当您这样做:

object.method();

…该

object
自动成为价值
this
method()
。因此:

[1,2,3].slice()

…将

[1,2,3]
Array设置为
this
in 的值
.slice()


但是,如果您可以用其他东西代替

this
价值呢?只要您替换的内容具有数字
.length
属性,以及一堆作为数字索引的属性,它就应该起作用。这种类型的对象通常称为类数组对象。

.call()
.apply()
方法让你手动设置的值
this
的函数。因此,如果我们的值设置
this
.slice()
一个阵列状物体 ,
.slice()
只会认为它的工作与Array,并会做它的东西。

以这个简单的对象为例。

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

显然这不是一个Array,但是如果您可以将其设置为的

this
.slice()
,那么它将正常工作,因为它看起来像Array一样
.slice()
可以正常工作。

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

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

['three','four'];

因此,当您将

arguments
对象设置为的
this
值时,就会发生这种情况
.slice()
。因为
arguments
具有一个
.length
属性和一堆数字索引,所以
.slice()
就像在真正的数组上工作一样进行工作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/407925.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号