gpt4 book ai didi

javascript - "arguments[n] cannot be set if n is greater than the number of formal or actual parameters"错误的状态?

转载 作者:行者123 更新时间:2023-11-29 10:51:01 25 4
gpt4 key购买 nike

可以设置函数 arguments 属性(Mozilla 称之为“类似数组”的属性)的各个元素,但是 Mozilla 报告无法在 SpiderMonkey 中向该属性添加元素1.5 虽然这在 1.6 中已修复(请参阅此处关于 SpiderMonkey 的注释... https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments)。

这是一个有用的属性,从子类链接构造函数,创建一个参数列表以传递给函数(例如,myclassmethod.apply(this, arguments))等

但是我发现 V8 不会像 Mozilla 报告的 SpiderMonkey 1.5 那样延长长度。 (不确定其他 JavaScript 引擎、Opera、Rhino 等的状态如何)。

这实际上是 ECMA 功能吗? Mozilla 是否错误地认为这是一个错误,或者 V8 是否有一个错误需要修复?

[更新] 我发现使用 V8 可以分配 arguments.length 属性,因此可以有效地扩展 arguments (或设置为任何长度您另有要求)。然而 JSLint 确实提示这是一个错误的分配。

[更新] 一些测试代码,如果有人想在 Opera、FF 等中尝试这个,创建一个子类的实例,用一个 arg 调用构造函数,同时向子类中的 arguments 添加一个元素构造函数并调用父类(super class)构造函数,父类(super class)应该报告两个参数:

function MyClass() {
if (arguments.length) {
console.log("arguments.length === " + arguments.length);
console.log("arguments[0] === " + arguments[0]);
console.log("arguments[1] === " + arguments[1]);
}
}

function MySubClass() {
console.log(arguments.length);
//arguments.length = 2; // uncomment to test extending `length' property works
arguments[1] = 2;
MyClass.apply(this, arguments);
}

MySubClass.prototype = new MyClass();

new MySubClass(1);

[更新] 当您通过外观对 arguments 进行任何类型的赋值时,JSLint 实际上会提示(例如,arguments[0] = "foo")。所以也许 JSLint 在这里也有一些工作要做。

最佳答案

不确定这是否是您要查找的内容,但您可以将参数对象制作成标准数组:

var args = [].slice.call(arguments, 0);

[编辑] 所以你可以这样做:

myclassmethod.apply(this, [].slice.call(arguments, 0).push(newValue));

关于javascript - "arguments[n] cannot be set if n is greater than the number of formal or actual parameters"错误的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10298873/

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