0

我是一名 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 发送给我:

错误:不允许参数名称“参数”初始化程序:(参数)->

编辑 :

没有“论据”

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

  }
}
4

1 回答 1

3

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

例子:

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
},
于 2013-06-17T08:24:44.180 回答