我的 JavaScript 对象是:
var MyObject = {
DOM: function(tagName){
if(!this.isElement){
var found = document.getElementsByTagName(tagName);
this.isElement = true;
for(i in found)
this[i] = found[i];
} else{
var found = this[0].getElementsByTagName(tagName);
for(i in found)
this[i] = found[i];
}
return this;
}
}
它工作得很好:
MyObject.DOM("div");
问题是当我再次记录该对象时:
MyObject.DOM("div");
console.log(MyObject);
问题是它记录了:
> Object {0: div#lower.cl, 1: div.higher, find: function, isElement: true}
但实际上我希望它记录:
> Object {find: function}
因此,当我再次运行 MyObject
时,我不希望它保留找到的元素。
所以我真的只想在每次使用该对象时重新加载它。
最佳答案
这是实现此目的的一种方法。最好坚持尽可能保持对象不可变。您尝试使用一个对象的一个实例来完成所有操作,但这是行不通的:
function MyObject() {
this.length = 0;
}
MyObject.prototype.DOM = function (tagName) {
var found = new MyObject(),
batch,
toSearch,
i,
j,
z = 0;
if (this === MyObject) {
toSearch = [document];
} else {
toSearch = Array.prototype.slice.call(this);
}
for (i = 0; i < toSearch.length; i += 1) {
batch = toSearch[i].getElementsByTagName(tagName);
for (j = 0; j < batch.length; j += 1) {
found[found.length] = batch[j];
found.length += 1;
}
}
return found;
}
MyObject.DOM = MyObject.prototype.DOM;
关于javascript - 对象覆盖不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371137/