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

标签 javascript

可以设置函数 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/

相关文章:

javascript - 如何设置 maxJsonLength 属性?

javascript - 如何将现有播客嵌入到我的网站中?

JavaScript 匿名函数 : how is this variable exposed in global namespace

javascript - 是否有可能比使用平方距离算法更快地测试两个圆的交点?

javascript - GAE channel Api 与套接字

javascript - 劫持 CSS 定义

javascript - 使用 Firebase 检查用户身份验证

javascript - 数组未保存在本地存储中

javascript - 基于 AJAX 的 Web 应用程序

javascript - 在 node.js 上对具有低 RAM 的大文件进行排序