Следующая функция создает поля ввода, в которых пользователь указывает тип, имя и количество классов, которые он хотел бы добавить для элемента ввода. Иногда пользователь хочет установить другие атрибуты для элемента, такие как step или любой другой атрибут DOM. Вот почему я хочу использовать необязательные аргументы:

function createInputField(type, name, classList, optional){
    var input = document.createElement('input');
    input.type = type;
    input.name = name;

    for(var i=0; i<classList.length; i++){
        input.classList.add(classList[i]);
    }

    for(key,value) in optional{ // Ugly fake code. How do I implement this in Javascript?
        input.getAttribute(key) = value;
    }    

    return input;
}

input = createInputField("number", "numberfield", ["red", "top"], {"step":"0.05"})

Как мне реализовать эту функциональность в Javascript?

-1
Sahand 2 Янв 2018 в 17:11

2 ответа

Лучший ответ

Просто используйте обычное перечисление объектов:

for (var key in optional) {
    var value = optional[key];
    input.setAttribute(key, value);
}

Это не обязательно связано с тем, что сам аргумент optional является необязательным, так что вы можете опустить его в вызове. Просто укажите пустой объект ({}), если вы не хотите передавать какие-либо дополнительные атрибуты dom.

Если вы хотите иметь возможность полностью опустить его (например, при вызове createInputField("number", "x", ["red"]), вы можете либо заключить цикл в условие if (typeof optional == "object"), либо использовать параметры по умолчанию:

function createInputField(type, name, classList = [], optional = {}) {
    …
}
1
Sahand 2 Янв 2018 в 18:48

Это то, что вам нужно:

if(optional && typeof optional === 'object') {
   for(var key in optional) {
      if(input.hasOwnProperty(key)) {
         input.getAttribute(key) = optional[key];
      }
   } 
}
1
Nikola Andreev 2 Янв 2018 в 14:34