转载自: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

使用JS构建简单Map(转)的更多相关文章

  1. javascript自定义简单map对象功能

    这里介绍一种js创建简单map对象的方法: function Map() { //创建object对象, 并给object对象添加key和value属性 var obj1=new Object(); ...

  2. js中的Map对象的简单示例

    es6提供一个对象Map, 其功能类似于java中的Map, 下面是java中的Map和js中的Map的简单对比: js中的Map.set()相当于java中的Map.put(), js中的Map.s ...

  3. 使用 Vuex + Vue.js 构建单页应用

    鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...

  4. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert

    使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...

  5. Javascript 如何生成Less和Js的Source map

    为什么有Source map CSS和JS脚本正变得越来越复杂,为了解决网络瓶颈,大部分源代码都需要经过编译.合并.压缩才能运用到实际环境中.为了减少网络资源占用,源码一般都会经过以下方式处理: 使用 ...

  6. JS的简单用法

    JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...

  7. angular4.0和angularJS、react.js、vue.js的简单比较

    angularJS特性 模板功能强大丰富(数据绑定大大减少了代码量) 比较完善的前端MVC框架(只要学习这个框架,按照规定往里面填东西就可以完成前端几乎所有的的问题) 引入了Java的一些概念 ang ...

  8. Grunt JS构建环境搭建以及使用入门

    Grunt JS构建环境搭建以及使用入门 1.应用场景 一种自动化任务处理工具,对于日常的需求(代码规则检查.代码合并)可以实现自动化执行,只需要保留package.json和Gruntfile.js ...

  9. iscroll.js的简单使用方法(总结)

    iscroll.js的简单使用方法(总结) 一.总结 一句话总结:Scroll是一个类,每个需要使用滚动功能的区域均要进行初始化. 最佳的HTML结构如下: <div id="wrap ...

随机推荐

  1. 5.Android之image控件学习

    Android中经常用到图片,比如图片浏览.图标等等,今天学习下image控件,image控件主要有ImageButton和ImageView两种. (1)ImageButton 在布局文件增加: & ...

  2. 【uoj150】 NOIP2015—运输计划

    http://uoj.ac/problem/150 (题目链接) 题意 给出一棵树以及m个询问,可以将树上一条边的权值修改为0,求经过这样的修改之后最长的边最短是多少. Solution 老早就听说过 ...

  3. CVE-2014-0160 Heartbleed Vul Analysis && OpenSSL Cryptographic Software Library Bug

    目录 . Heartbleed漏洞简介 . 漏洞造成的风险和影响 . 漏洞的测试.POC . OpenSSL漏洞源代码分析 . 防御.修复方案 . 从漏洞中得到的攻防思考 1. Heartbleed漏 ...

  4. hdu acmsteps 2.1.3 Cake

    Cake Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  5. Ubuntu 12.10安装OpenGL

    http://wiki.ubuntu-tw.org/index.php?title=Howto_Install_OpenGL_Development_Environment 前言 OpenGL 是一套 ...

  6. Idea 添加lib文件夹,并添加至项目Libary

    在WEB-INF文件夹下新建lib文件夹,在lib文件夹上右键选择Add as Libary...,然后填写library名称,选择作用级别,选择作用项目,OK 注意:lib文件夹下需要有jar包后才 ...

  7. how to combine jpg + separate alpha in png?

    http://www.tasharen.com/forum/index.php?topic=4018.msg19784#msg19784 I have tons of large sprites, I ...

  8. 使用prompt输入一句英文句子和排序方式(升/降),将所有单词按排序方式排序后在网页上输出

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 基于SSH2框架Struts2拦截器的登录验证实现(转)

        大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证.     修改数 ...

  10. 关于31天App教程示例中一些因SDK版本而出现的问题(转)

    由于国外那个知名的31天案例教程比较老,所用官方API是2008年时的2.X,所以在现在的Xcode3-4之后或多或少都有编译警告和错误信息.必须做些适应iOS版本的代码更改才能顺利编译通过. Day ...