使用JS構建簡單Map(轉)


轉載自:http://freejvm.iteye.com/blog/768025

最近使用源生的js處理頁面數據,所謂源生的就是指沒有經過包裝的、最基本的JavaScript代碼; 
像使用ext,jQuery...說成非源生的代碼;自己做個輪子:一個簡單的map; 
在js里,對象是屬性的集合,屬性是合法的js標識符,屬性名是String類型; 
屬性可以有值,也可以沒值(undefined),屬性的值可以是原始類型,也可以是對象; 
js里,函數也是對象,值為函數的屬性是對象的方法; 
可以在運行時為對象添加屬性,這也是動態語言的一個特點,這樣的特點可以使代碼很靈活,同樣也可以讓代碼很難維護; 
當創建一個函數時,系統/引擎會自動給它添加一個屬性prototype,如:

function Fn(){}  
alert(typeof Fn.prototype); //object  

此時,prototype指向一個對象,或prototype的值為一個對象,這也是默認的賦值;

Fn.prototype=1;  
alert(typeof Fn.prototype); //number //這樣就修改了prototype的值,不過意義不大  

使用prototype可以設計繼承機構,我現在還沒有足夠的內功和口才敘述它, 
片面的理解就是一句話:相同類型的對象具備此類型prototype的屬性; 
下面就看看我的map吧 

function getMap(){//初始化map_,給map_對象增加方法,使map_像個Map  
    var map_=new Object();  
    //屬性加個特殊字符,以區別方法名,統一加下划線_  
    map_.put=function(key,value){    map_[key]=value;}   
    map_.get=function(key){    return map_[key];}  
    map_.remove=function(key){    delete map_[key];}      
    map_.keyset=function(){  
        var ret="";  
        for(var p in map_){      
            if(typeof p =='string' && p.substring(p.length-1)=="_"){   
                ret+=",";  
                ret+=p;  
            }  
        }             
        if(ret==""){  
            return ret.split(","); //empty array  
        }else{  
            return ret.substring(1).split(",");   
        }  
    }     
    return map_;  
}  
var map_=getMap();  
map_.put('id_',"001");  
map_.put('name_',"anna");  
alert(map_.keyset()); //id_,name_  
var keys=map_.keyset();  
for(var i=0;i<keys.length;i++){      
    alert(map_.get(keys[i])); //001,then anna  
}  
map_.put("course_",new Array());  
map_.get("course_").push("Math");  
map_.get("course_").push("English");  
map_.get("course_").push("Physics");  
alert(map_.get("course_")); //Math,English,Physics  

可以在此map_的基礎之上構建復雜點的數據結構,如:樹狀結構; 
js學習中...想看一些關於js優化、內存管理的書籍,了解的同仁可以推薦一下,OTZ 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM