对象覆盖不起作用

时间:2014-06-23 16:45:31

标签: javascript object

我的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时,我不希望它保留找到的元素。

所以我真的只想在每次使用它时重新加载对象。

2 个答案:

答案 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;

http://jsfiddle.net/Sygdm/

答案 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;
    }
  }
})();

不确定这是不是你想要的。