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