[英]Function overloading with different arguments JavaScript
我有一種稱為“ 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)
}
}
我可以通過找出我通過typeOf在“ naam”中接收到的哪種變量然后采取相應的措施來解決此問題,但是我覺得這會導致代碼混亂。
我想做的是有2個功能:
其中帶有名稱數組的名稱(naam(荷蘭語)為復數)將在for循環中調用第一個。
這在JavaScript中可行嗎? 因為據我所知,沒有辦法告訴Javascript方法:“您只能接受這種類型的變量,而只能接受這種類型”
我知道在python中你可以做這樣的事情def functionName(categorie:str,naam:str)等。
JavaScript不支持基於參數類型的函數重載。
但是,正如@AlexK 建議的那樣 ,您可以修改函數以接受可變數量的參數:
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[0]
是categorie
,所以這開始在arguments[1]
處尋找參數。 然后,傳遞給leer
每一個naam
將被推到陣列上。
您可以這樣調用函數:
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`.
}
};
現在,您可以修改函數以接受字符串或數組,而不是:
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']);
如果可以選擇ES2015:
WoordenSchat.prototype.leer = function(categorie, ...namen) {
if (! this.hasOwnProperty(categorie)) {
this[categorie] = [];
}
this[categorie].push(...namen);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.