Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中自己实现数组对象_Javascript_Jquery - Fatal编程技术网

在Javascript中自己实现数组对象

在Javascript中自己实现数组对象,javascript,jquery,Javascript,Jquery,是的,看起来很疯狂,但让我解释清楚。 例如,在Jquery中,我们使用$('div')返回一个数组集合或类似的东西:[div#container,div#header,div#logo],神奇的是,数组中的push、length、pop、join、concat等基本方法不会显示给您。 我怎样才能得到这种行为??我希望返回一个元素集合,就像Jquery一样,但是使用我自己的方法(remove、appendHTML和其他方法),而不是默认的数组方法。 有什么想法吗???尝试创建如下对象数组: var

是的,看起来很疯狂,但让我解释清楚。 例如,在Jquery中,我们使用$('div')返回一个数组集合或类似的东西:[div#container,div#header,div#logo],神奇的是,数组中的push、length、pop、join、concat等基本方法不会显示给您。 我怎样才能得到这种行为??我希望返回一个元素集合,就像Jquery一样,但是使用我自己的方法(remove、appendHTML和其他方法),而不是默认的数组方法。
有什么想法吗???

尝试创建如下对象数组:

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

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

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());
现在我们可以这样声明一个变量:

var myarray = arrayLike();
myarray.add('some');
myarray.add('other');
神奇之处在于我们用Firebug编写(例如):

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

你可以看看Underline.js的收集方法以获得灵感:简言之,可能重复,定义数值属性,一个
length
属性,并将自定义方法分配给
YourArrayKeyObject.prototype
。谢谢但是当我编写(例如在Firebug控制台中)yourCollection时,它会显示这样一个对象:Object{myCustomPush=function(),size=function()},其思想是显示类似数组的对象,比如:['some','foo','bar],但是当我编写yourCollection.some()时没有显示来自本机数组的方法。我的想法是从不在我的LikerRay中显示默认数组函数(concat、pop、push…)。some(),但是当我编写LikerRay时,它必须显示类似['some'、'element'、'other']的内容。阅读相关文章时,我有一个想法。。。关于这个:function
likerray(){var FINAL={length:0,splice:function(){},add:function(el){return FINAL[FINAL.length++]=el;},remove:function(pos){//my cool stuff to remove};return FINAL;}
var myarray = arrayLike();
myarray.add('some');
myarray.add('other');
myarray.