对象覆盖不起作用

Object overwriting not working

本文关键字:不起作用 覆盖 对象      更新时间:2023-09-26

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

每次使用时都要重新加载对象

这里有一种实现方法。最好是坚持让对象尽可能地保持不可变。你试图用一个对象的一个实例来做所有的事情,这是行不通的:

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/

你可以像这样给你的类添加一些'私有'字段:

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

不确定这是不是你想要的