// 模拟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),这样为啥可以,有人可以解释吗
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
看一下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指向的就是你自定义的对象,
比如:
至于后面的参数就是原方法需要的参数,按顺序依次传入,比如:
return [].slice.call(arguments);
这个地方是对象冒充机制吧 跟slice怎么用的没有关系
其实你要看的不是slice文档,而是call,apply的文档
应该先call这个方法看一下