Всякий раз, когда вы явно возвращаете объект из конструктора, возвращаемое значение будет только этим объектом , а не экземпляром класса.Когда вы делаете
return [element,attributeList]
, то возвращается только простой массив, без каких-либо подключений к inputBox
, поэтому ссылка на метод класса inputBox
в этом массиве не будет работать.
Вместо этого поместите element
и attributeList
на экземпляр.
Поместив элемент в экземпляр, вы также можете избежать создания динамического уникального идентификатора для каждого элемента (который является кодомпахнуть) - скорее, просто сослаться на this.element
:
class inputBox {
constructor(attributeList){
this.element = document.createElement('input');
this.attributeList = attributeList;
for (const attr in attributeList){
this.element.setAttribute(attr,this.attributeList[attr]);
}
}
updateValue(newValue) {
this.element.value = newValue;
}
}
Тем не менее, если в inputBox
не будет больше кода, здесь, похоже, не будет никакого использования класса -после построения его единственная открытая функциональность - установить значение ввода, что можно сделать менее скрытно, просто используя ссылку на вход.Подумайте о наличии функции, которая присваивает attributeList
атрибутам элемента, а затем просто использует простой элемент, например:
const myInput = assignAttributes(attributeList);
// ...
myInput.value = 'newValue';