不允许使用coffeeScript参数名称“arguments”

时间:2013-06-17 08:13:49

标签: javascript coffeescript yui3

我是一名JavaScript开发人员。我使用YUI3进行客户端/服务器开发。我想尝试coffeescript,但我有一个问题。 为了用YUI做POO,我必须使用这个结构:

MyClass = function(){
    MyClass.superclass.constructor.apply(this, arguments);
};

MyClass.prototype = {
    initializer: function (arguments) {

    },
    otherFunction: (){}
}

http://yuilibrary.com/yui/docs/base/

我无法重命名参数,因此编译器coffescript发送给我:

error: parameter name "arguments" is not allowed                                                                                                                                                                            initializer: (arguments) ->

编辑:

没有“参数”

MyClass = function(args) {
  return MyClass.superclass.constructor.apply(this, args);
};
MyClass.prototype = {
  initializer: function(args) {

  }
}

1 个答案:

答案 0 :(得分:3)

在Javascript中将“arguments”作为参数名称是一个坏主意,如果它甚至可能的话。 (上帝,我希望不是)“参数”是一个“关键字似的东西”总是“返回/包含/表示”一个类似于数组的对象,包含它所包含的函数中给出的所有参数。

示例:

function foo() {
  console.log(arguments);
}

foo("a", "b"); // prints something like {0: "a", 1: "b"}

此外,apply()方法接收一个数组(或类数组对象)的参数来调用函数。

function bar(a, b) {
  console.log([a, b]);
}

bar.apply(this, [1, 2]);  // prints something like [1, 2]

因此,您可以将arguments-object传递给.apply来调用一个方法,该方法使用相同的参数调用封闭函数。

换句话说,您可能只想省略初始化程序中的“arguments”参数。调用初始化程序时它已存在。

initializer: function () {
  console.log(arguments); // no error, i'm here for you
},