javascript - 关于slice方法参数的问题
PHP中文网
PHP中文网 2017-04-11 11:10:26
[JavaScript讨论组]
// 模拟Array.of方法
const MOCK_ARRAY_OF = function() {
    return [].slice.call(arguments);
};
// 使用模拟的方法来创建数组
let arrOfMock = MOCK_ARRAY_OF(3, 2, 1);
console.log(arrOfMock); // [ 3, 2, 1 ]

作者:dreamapplehappy
链接:https://zhuanlan.zhihu.com/p/24377094
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我在逛论坛的时候发现这个代码,我现在有个疑惑,slice它的

第一个参数不应该是起始位置吗?为什么这里给他的是一个对象(arguments),这样为啥可以,有人可以解释吗

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(5)
阿神

看一下call和apply吧,另外slice的第一个参数是可以省略的,省略时默认从0开始

迷茫

fun.call(thisArg[, arg1[, arg2[, ...]]])

参数

thisArg

在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。

arg1,arg2……

参数列表

简单理解

第一个参数来改变this指向的,你传递的对象来代替方法中this对象,比如全局方法中this代表window,但当你调用时,使用call来调用,第一个参数你传了一个你自定义的对象,那你方法中this指向的就是你自定义的对象,
比如:

var name='zhangsan';
function showName(){
    document.writeln(this.name);
}
showName();   //zhangsan

var lisi={name:'lisi'};
showName.call(lisi);  //lisi

至于后面的参数就是原方法需要的参数,按顺序依次传入,比如:

var name='zhangsan';
function showName(sex,age){
    document.writeln(this.name+','+sex+','+age);
}
showName('male','28');    //zhangsan,male,28 

var lisi={name:'lisi'};
showName.call(lisi,'female','30');  //lisi,female,30
巴扎黑

return [].slice.call(arguments);
这个地方是对象冒充机制吧 跟slice怎么用的没有关系

高洛峰

其实你要看的不是slice文档,而是call,apply的文档

迷茫

应该先call这个方法看一下

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号