我有这种名为“leer' (用英语学习)atm有2个单词。 1表示类别,1表示该类别。现在我想添加一些功能,我可以在一个类别中添加一堆单词。
WoordenSchat.prototype.leer = function(categorie,naam){
if (!this.hasOwnProperty(categorie)){
this[categorie] = []
this[categorie].push(naam)
}
else {
this[categorie].push(naam)
}
}
我可以通过弄清楚我在naam'中收到的变量来解决这个问题。通过typeOf,然后相应地采取行动,但我觉得这会导致一段混乱的代码。
我想做的是有两个功能:
其中一个名称数组(naam(荷兰语)复数形式)将在for循环中调用第一个名称。
这在JavaScript中可行吗?因为据我所知,没有办法告诉Javascript方法:"你只接受这种类型的变量和#34;
我知道在python中你可以做这样的def functionName(categorie:str,naam:str)等。
答案 0 :(得分:2)
JavaScript不支持基于参数类型的函数重载 但是,作为@AlexK suggested,可以修改函数以接受可变数量的参数:
WoordenSchat.prototype.leer = function(categorie){
if (!this.hasOwnProperty(categorie)){ // We only need to do this check once.
this[categorie] = [];
}
for(var i = 1; i < arguments.length; i++){
this[categorie].push(arguments[i]); // `arguments[i]` is the current `naam`.
}
};
这开始在arguments[1]
处查找参数,因为arguments[0]
是categorie
。然后,传递给naam
的每个leer
都将被推送到数组上。
你可以这样调用这个函数:
myWoordenSchat.leer('programmeren', 'functies', 'variabelen', 'constanten');
您可以根据需要在categorie
之后添加任意数量的参数。
这个功能可以简化一点:
WoordenSchat.prototype.leer = function(categorie){
this[categorie] = this[categorie] || []; // Make sure `this[categorie]` exists
for(var i = 1; i < arguments.length; i++){
this[categorie].push(arguments[i]); // `arguments[i]` is the current `naam`.
}
};
现在,您可以修改函数以接受stings或数组,而不是:
WoordenSchat.prototype.leer = function(categorie, namen){
this[categorie] = this[categorie] || [];
if(typeof namen === 'string'){ // The first parameter after `categorie` is a string
namen = arguments.splice(1); // So, get all parameters after `categorie` as array
}
for(var i = 0; i < namen.length; i++){
this[categorie].push(namen[i]);
}
};
因此,如果categorie
之后的第一个参数是一个字符串,则迭代所有参数,否则,迭代namen
数组。
您应该能够像这样调用函数:
myWoordenSchat.leer('programmeren', 'functies');
myWoordenSchat.leer('programmeren', 'functies', 'variabelen', 'constanten');
myWoordenSchat.leer('programmeren', ['functies', 'variabelen', 'constanten']);
答案 1 :(得分:0)
如果ES2015是一个选项:
WoordenSchat.prototype.leer = function(categorie, ...namen) {
if (! this.hasOwnProperty(categorie)) {
this[categorie] = [];
}
this[categorie].push(...namen);
}