Я пытаюсь найти способ обновить объект изнутри объекта, хотя я не уверен, возможно ли это.
Что я подразумеваю под refresh , так это заменить текущий объект, вызвав метод вместо присваивания.
Этот код найдет каждый элемент ввода и сохранит ссылку на элемент и свойства name
и value
каждого элемента в отдельном массиве.
HTMLElement.prototype.getChildInputs = function() {
let eles = [...this.querySelectorAll("input")];
return {
eles,
fields: eles.map(ele => {
return {
name: ele.name,
value: ele.value || ""
}
}),
refresh: function() {
return this.getChildInputs();
}
}
}
Примечание Имейте в виду, что это минимальный пример
HTMLElement.prototype.getChildInputs = function() {
let eles = [...this.querySelectorAll("input")];
return {
eles,
fields: eles.map(ele => {
return {
name: ele.name,
value: ele.value || ""
}
}),
refresh: function() {
return this.getChildInputs();
}
}
}
let i = document.querySelector(".container").getChildInputs();
console.log(i);
<div class="container">
<div class="field">
<label>first name</label>
<input name="f_name" />
</div>
<div class="field">
<label>last name</label>
<input name="l_name" />
</div>
<hr/>
<div class="field">
<label>username</label>
<input name="username" />
</div>
<div class="field">
<label>password</label><input name="password" type="password">
</div>
</div>
Чтобы обновить вышеупомянутый объект, я должен использовать присвоение переменной, т.е.
i = i.refresh();
Я бы хотел просто написать
i.refresh();
И пусть объект переписывает сам. Моя первая попытка была самой очевидной, но она не разрешена:
HTMLElement.prototype.getChildInputs = function() {
...
return {
...,
refresh: function() {
this = this.getChildInputs();
}
}
}
Приводит меня к мысли, что это может быть невозможно, но, возможно, я неправильно думаю о проблеме. Любая помощь будет отличной.