gpt4 book ai didi

javascript - 函数.参数问题

转载 作者:行者123 更新时间:2023-11-29 18:33:50 25 4
gpt4 key购买 nike

请帮助我理解以下代码:

向所有对象添加名为“later”的方法。此方法用于将来使用 setTimeout 调用其他方法。

Object.prototype.later = function (msec, method) {
// save 'this' as 'that' so we can use 'this' in inner function
var that = this;
// I cannot understand: what [2] means
// args will be ['Make is']. How?
var args = Array.prototype.slice.apply(arguments, [2]);

if (typeof method === 'string') {
method = that[method];
}
// now use setTimeout to call method in future
setTimeout(function () { method.apply(that, args); }, msec);
return that;
}

// example of using later method
var car = {};
car.make = 'Ford';
car.show = function (message) {
alert(message + ' ' + this.make);
}
car.later(1000, 'show', 'Make is');

所以,当我们调用car.later时,传递了第三个参数,将在alert函数中使用

问题是:我们如何读取第三个参数“Make is”?

最佳答案

apply 函数需要一个数组作为其第二个参数,该数组的元素将是所应用函数的参数。所以,这:

var args = Array.prototype.slice.apply(arguments, [2]);

...表示调用 Arrayslice 方法,传递给参数 2 对象>(即在调用 slice 时用一个元素(即数字 2)填充 arguments 对象)。

如果 arguments 对象有它自己的 slice 方法,那么上面的内容等同于:

arguments.slice(2);

apply 技巧是必要的,因为 arguments 实际上不是 Array 的实例并且没有 slice 方法。

这样做是返回一个新数组,其中包含从第三个开始的laters arguments 对象的所有元素。这就是它返回 ['Make is'] 的原因。

如果您实际上只想要作为 arguments 中第三个元素的字符串,那么请执行以下操作:

arguments[2];

还要注意 call 的存在,它就像 apply 一样,只是它允许您传递一个值列表以用于填充 arguments 对象,这样您就不必像上面那样将参数包装在数组中:

var args = Array.prototype.slice.call(arguments, 2);

关于javascript - 函数.参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5320518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com