使用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
使用JS构建简单Map(转)的更多相关文章
- javascript自定义简单map对象功能
这里介绍一种js创建简单map对象的方法: function Map() { //创建object对象, 并给object对象添加key和value属性 var obj1=new Object(); ...
- js中的Map对象的简单示例
es6提供一个对象Map, 其功能类似于java中的Map, 下面是java中的Map和js中的Map的简单对比: js中的Map.set()相当于java中的Map.put(), js中的Map.s ...
- 使用 Vuex + Vue.js 构建单页应用
鉴于该篇文章阅读量大,回复的同学也挺多的,特地抽空写了一篇 vue2.0 下的 vuex 使用方法,传送门:使用 Vuex + Vue.js 构建单页应用[新篇] ------------------ ...
- 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert
使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...
- Javascript 如何生成Less和Js的Source map
为什么有Source map CSS和JS脚本正变得越来越复杂,为了解决网络瓶颈,大部分源代码都需要经过编译.合并.压缩才能运用到实际环境中.为了减少网络资源占用,源码一般都会经过以下方式处理: 使用 ...
- JS的简单用法
JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...
- angular4.0和angularJS、react.js、vue.js的简单比较
angularJS特性 模板功能强大丰富(数据绑定大大减少了代码量) 比较完善的前端MVC框架(只要学习这个框架,按照规定往里面填东西就可以完成前端几乎所有的的问题) 引入了Java的一些概念 ang ...
- Grunt JS构建环境搭建以及使用入门
Grunt JS构建环境搭建以及使用入门 1.应用场景 一种自动化任务处理工具,对于日常的需求(代码规则检查.代码合并)可以实现自动化执行,只需要保留package.json和Gruntfile.js ...
- iscroll.js的简单使用方法(总结)
iscroll.js的简单使用方法(总结) 一.总结 一句话总结:Scroll是一个类,每个需要使用滚动功能的区域均要进行初始化. 最佳的HTML结构如下: <div id="wrap ...
随机推荐
- poj 2155 Matrix---树状数组套树状数组
二维树状数组模版,唯一困难,看题!!(其实是我英语渣) Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 22098 ...
- OPENSSL编程入门学习
相关学习资料 http://bbs.pediy.com/showthread.php?t=92649 https://www.openssl.org https://www.google.com.hk ...
- WWDC2014总结---For产品经理们
一年一度的苹果开发者大会WWDC2014,在北京时间6月3日凌晨1点开始了,苹果发布了iOS8.OSX10.10等,苹果比以前更加开放了,网上东西很多很杂,但缺少从产品开发角度来梳理的文章. 我根据这 ...
- Bootstrap教程:[4]栅格系统详解
http://jingyan.baidu.com/article/6f2f55a1852aa1b5b83e6c5a.html 们都知道bootstrap3.0使用了四种栅格选项来形成栅格系统,这四种选 ...
- tomcat7禁用catalina.out输出
tomcat7中禁用catalina.out的输出,又可能很大. 直接修改catalina.sh文件的输出语句. 在文件中找到以下内容. if [ -z "$CATALINA_OUT&quo ...
- insert 多个values
INSERT INTO `user_mail_attach` VALUES(, , , , , ), (, , , , , ); 这种比写多条insert语句效率高
- std::thread
std::shared_ptr<std::thread> m_spThread; m_spThread.reset(new std::thread(std::bind(&GameS ...
- js中window的属性
Window的属性 属性描述 closed 获取引用窗口是否已关闭. defaultStatus 设置或获取要在窗口底部的状态栏上显示的缺省信息. dialogArguments 设置或获取传递给模式 ...
- Swift翻译之-关于Swift
IMPORTANT 重要的 This is a preliminary document for an API or technology in development. Apple is suppl ...
- gvim-ide plugins
omnicppcomplete-0.41.zip after: ftplugin: c.vim,cpp.vim,两个文件的内容相同, 其中都只有一个call语句: call omni#cpp#comp ...