尽管我不确定是否可能,但我正在尝试从对象内部刷新对象的方法。
刷新的意思是通过调用方法而不是赋值来替换当前对象。
此代码将找到每个输入元素,并将元素引用以及每个元素的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();
}
}
}
使我相信这可能是不可能的,但是我可能在错误地考虑问题。任何帮助都是很好的。
答案 0 :(得分:1)
也许是这样吗?
HTMLElement.prototype.getChildInputs = function() {
const parent = this;
return {
eles: [...parent.querySelectorAll("input")],
get fields() {
this.eles.map(ele => {
return {
name: ele.name,
value: ele.value || ""
}
})
},
refresh() {
this.eles = [...parent.querySelectorAll("input")]
}
}
}