gpt4 book ai didi

javascript - 在数组的 .concat 上调用 .apply

转载 作者:行者123 更新时间:2023-11-29 20:46:19 25 4
gpt4 key购买 nike

我正在为提供更多功能的常见 JavaScript 类型创建包装器。除了新方法和属性之外,它们还具有与它们作为包装器的类型相同的所有方法和属性。我并没有完全重写已经存在的方法,即使我可能会改变它们的逻辑,所以我总是在包装值上回调到原始方法。

对于字符串的包装器,charCodeAt 可能看起来像这样:

this.charCodeAt = function (index) {
return internalValue.charCodeAt(index);
};

在上面的例子中我不需要做太多:

  • string.charCodeAt 调用中的参数 index 是可选的,因此我不需要编写任何逻辑来处理相同参数的情况在调用 wrapper.charCodeAt 时省略。
  • indexstring.charCodeAt 接受的唯一参数,因此也无需处理传递给 wrapper.charCodeAt 的额外变量,因为他们将被忽略。

我在尝试调用一个接受可变数量参数的方法时遇到了问题。有问题的方法是 array.concat。在其他情况下,我编写代码将任意数量的参数传递给 JavaScript 中的函数,我使用的解决方案是 func.apply(null, argumentArray) 其中 argumentArray 是我要传递给 func 的参数数组。这不适用于 .concat:

var array = [0, 1];
var error;

try {
array.concat.apply(null, [2, 3]);
} catch (error) {
console.log(error);
}

写入控制台的错误消息显示 TypeError: Array.prototype.concat called on null or undefined。我研究了将 applyconcat 一起使用,似乎我会遇到与构造函数原型(prototype)上定义的其他方法类似的问题。

为什么我在使用 array.concat.apply 时会遇到这个问题?将任意数量的参数作为数组传递给 .concat 等方法的正确方法是什么?

最佳答案

调用原型(prototype)方法并在对 apply() 的调用中正确设置 this 参数应该可行:

var array = [0, 1];
var error;

try {
array = Array.prototype.concat.apply(array, [2, 3]);
} catch (error) {
console.log(error);
}

console.log(array);

关于javascript - 在数组的 .concat 上调用 .apply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432660/

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