You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析jQuery插件样板代码第10、12行:关于arguments与call()的疑问

关于代码第10、12行及相关疑问的解答

嘿,我来帮你把这些疑问掰扯清楚,咱们一步一步拆解:

1. 先搞懂arguments是什么

  • arguments是函数内部自动存在的特殊类数组对象,完全不需要你手动定义!只要调用一个函数,这个函数的作用域里就会自动生成arguments,它包含了调用该函数时传入的所有参数——你可以通过索引(比如arguments[0])访问单个参数,也能通过arguments.length获取参数总数。

2. call()的核心作用

  • call()是函数的内置方法,主要干两件关键的事:
    • 强行改变目标函数执行时的this指向,让目标函数内部的this绑定到你指定的对象上;
    • 可以在call()的第一个参数之后,直接传递参数给目标函数。
  • 举个简单例子:func.call(obj, a, b),意思就是让func函数以obj作为this来执行,同时把a和b作为参数传给func。

3. 第10行的纠正与补充

你之前的理解方向是对的,但可以更精准:

若传入samplePlugin的参数为方法,则通过call()让该方法执行时的this指向当前脚本上下文的this(也就是第10行所在环境的this,比如可能是插件实例、全局对象或者某个特定对象,具体要看代码的整体上下文),同时还会把后续的参数传递给这个方法。

4. 再深入说说Array.prototype.slice.call(arguments, 1)

你已经知道它能把除首个参数外的所有参数转为真实数组,再补充两个关键点:

  • 为什么不能直接用arguments.slice(1)?因为arguments是类数组,不是真正的数组,它没有数组的slice方法,所以得“借用”数组原型上的slice方法;
  • Array.prototype.slice.call(arguments, 1)的本质是:用call()把slice方法的this绑定到arguments上,让slice以为自己是在处理一个数组,然后从索引1开始截取元素,最终返回一个标准的数组。

内容的提问来源于stack exchange,提问作者user1032531

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:53:17