javascript - 对象覆盖不起作用

标签 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);

问题是它记录了:

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

http://jsfiddle.net/Sygdm/

关于javascript - 对象覆盖不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24371137/

相关文章:

javascript - 如何将 jquery 放入仅在该部分 View 中工作的部分 View 中?

javascript - 使用 Sass 响应服务器端渲染

javascript - 无法创建多个嵌套对象 JS。 "Unexpected identifier"

javascript - 创建对象时如何处理丢失的 JSON 数据? ( typescript )

Javascript将4个数组的值合并到一个对象中

javascript - 在传送带上的幻灯片之间插入边距/填充

javascript - 来自命令行的 Uglify-js 不会破坏变量名

javascript - jquery/javascript 将日期字符串转换为日期

javascript - 如何在 Javascript 构造函数中使用 boolean 值?

Java 控制台显示对象的地址而不是实际值