在Javascript中自己实现数组对象

时间:2012-03-18 17:08:09

标签: javascript jquery

是的,看起来很疯狂,但让我解释得更好。 在Jquery中我们使用例如$('div')返回一个Array Collection或类似的东西:[div#container,div#header,div #logo],神奇的是像push,length,pop这样的方法, join,concat是Array中的原始方法,不会显示给你。 我怎么能得到这种行为?我想像Jquery一样返回一个元素集合,但是使用我自己的方法(remove,appendHTML和其他方法)但不是默认的Array方法。 任何想法??

3 个答案:

答案 0 :(得分:0)

尝试创建一个这样的对象数组:

var myObjectArray = [];

function addObject(id){
    if(document.getElementById(id)!=null){
        myObjectArray.push(document.getElementById(id));
        return true;
    }else{
        return false;
    }
}

function removeObject(id){
    for(i in myObjectArray){
       if(myObjectArray[i].getAttribute("id")==id){
           delete myObjectArray[i];
           return true;
        }
    }    
    return false;
}

function getObject(id){
    for(i in myObjectArray){
        if(myObjectArray[i].getAttribute("id")==id) return myObjectArray[i];
    }
    return null;
}

答案 1 :(得分:0)

您可以使用私有数组创建一个自定义对象,您可以在其中公开所需的方法

var yourCollection = function() {
    var privateArray = [1, 2, 3, 4];

    return {
        myCustomPush: function(el) {
            //use your custom push function or
            privateArray.push(el);

        },
        size: function() {
            return privateArray.length;
        }
    }
}();

yourCollection.myCustomPush("s");
alert(yourCollection.size());

答案 2 :(得分:0)

function() arrayLike {
    var FINAL = {
        length:0,
        splice:function(){}
        add:function(el){
            return FINAL[FINAL.length++]=el;
        };
    }
}

现在我们可以声明这样的var:

var myarray = arrayLike();
myarray.add('some');
myarray.add('other');

神奇的是我们用Firebug编写(例如):

myarray.

只有add()方法会显示,但不是默认的Arrays方法(concat,push,pop ...) 任何改进此代码的想法,请发布!!或写信给我(请!)