我是一名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) {
}
}
答案 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
},