我的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);
问题是它记录了:
>对象{0:div#lower.cl,1:div.higher,find:function,isElement:true}
但实际上我想要它记录:
>对象{find:function}
所以当我再次运行MyObject
时,我不希望它保留找到的元素。
所以我真的只想在每次使用它时重新加载对象。
答案 0 :(得分:1)
以下是实现此目的的一种方法。如果你坚持让对象尽可能不变,那就最好了。您尝试使用一个对象的一个实例来执行所有操作,但这不会起作用:
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;
答案 1 :(得分:0)
您可以添加一些私人&#39;像你这样的字段:
var MyObject = (function() {
var instance = {};
return {
DOM: function(tagName){
if(!instance.isElement){
var found = document.getElementsByTagName(tagName);
instance.isElement = true;
for(i in found)
instance[i] = found[i];
} else{
var found = instance[0].getElementsByTagName(tagName);
for(i in found)
instance[i] = found[i];
}
return this;
}
}
})();
不确定这是不是你想要的。