2012-03-18 23 views
1

是的,看起來很瘋狂,但讓我更好地解釋。我們使用例如$('div')它返回一個數組集合或類似這樣的東西:[div#container,div#header,div#logo],神奇的是,像push,length,pop ,連接,來自Array的原始方法的concat不會顯示給你。 我怎樣才能得到這種行爲?我想像Jquery一樣返回元素集合,但是使用我自己的方法(remove,appendHTML和其他),但不是默認的Array方法。 任何想法?自己實現Javascript中的數組對象

+0

您可能會看看Underscore.js的靈感收集方法:http://documentcloud.github.com/underscore/#collections – rjz 2012-03-18 17:10:05

+0

[Javascript Like對象數組]的重複http://stackoverflow.com/questions/6599071/array-like-objects-in-javascript) – 2012-03-18 17:10:55

+0

簡而言之,定義數字屬性,'length'屬性,並將自定義方法分配給'YourArrayLikeObject.prototype'。 http://stackoverflow.com/search?q=jquery+like+array – 2012-03-18 17:11:49

回答

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

現在我們可以宣佈像這樣的變體:

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

而神奇的是,我們在Firebug寫(例如):

myarray. 

只有add()方法會告訴你,但不是默認陣列方法(concat,則推,流行...) 任何改進此代碼的想法,請發佈它!或寫信給我(請!)

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

這個想法從來沒有在我的likeArray.some()中顯示默認數組函數(concat,pop,push ...),但是當我編寫likeArray它必須顯示像['一些','元素','另一個'] – 2012-03-22 03:27:42

+0

閱讀相關文章我有一個想法...這是怎麼回事:功能likeArray(){ var FINAL = { length:0, splice:function(){ }, add:function (el){ \t \t \t return FINAL[FINAL.length++]=el; \t \t \t }, remove:function(pos){ //my cool stuff to remove } }; \t return FINAL; } 2012-03-22 03:30:46

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()); 
+0

謝謝......但是當我寫(例如在Firebug控制檯)yourCollection,它顯示一個對象,如下所示:Object {myCustomPush = function(),size = function()},想法是顯示一個Array Like Object,如下所示:['some','foo','bar' ],但是當我寫yourCollection.some()時,沒有顯示本地數組的方法。 – 2012-03-22 03:25:39