• 使用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 

  • 相关阅读:
    請問各位大大,我要將listview顯示的縮圖加入到listview2,請問該如何做呢
    一个可设置窗口透明属性的控件,可让窗口透明、半透明
    laravel he stream or file "..laravel-2019-02-14.log" could not be opened: failed to open stream: Permission denied
    每日学习-20190721
    linux centos无法删除网站根目录下的.user.ini解决办法
    laravel在使用Composer安装插件时要求输入授权用户名密码解决办法
    Centos7 日志查看工具
    Centos7 Putty SSH密钥登录
    阿里云Centos7用putty ssh链接掉线
    阿里云 centos 无法执行moodle cron
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/5146170.html
Copyright © 2020-2023  润新知