由实现JavaScript中的Map想到的
项目中要用到JavaScript中的Map数据类型,它不像JDK那样有自带的,怎么办?搜了找到一个不错的(http://darkmasky.iteye.com/blog/454749)。用这个可以满足项目中要求。在找的过程中,发现这么个轻量级的实现。http://www.iteye.com/topic/196610帖子中,二楼myy的回复内容。应该说这个简单地实现可以满足我的一些需求,但它少了size方法。
在这个简单实现的基础上,自己能不能加一个size方法呢?而不地通过封装Array那样的重量级实现。
围绕这个问题,仔细想想还是有点嚼头儿的。
1, JavaScript中“var map = {}” 这样的声明,实质上是什么?是不是等价于“ar map = new Object()”不?
2, 如果像问题1描述那样,是等价的。应该可以通过给Object类prototype地增加size方法。不过这个size方法怎么实现?
3, Size方法的实现,不外乎两种模式:遍历式和注册式。
a) 遍历式:实现起来简单,其思想是,每调用size方法时,遍历Object中的属性,算出其属性(关于属性还有一个问题,见下面的讨论)个数。可以看出,这样的实现其执行效率很低。
b) 注册式:实现思想是,先给Object加一个名为elementSize的属性,在通过map["key1"] = "Value1"方式往Object中另加属性时,通过某种机制自动地增长这个elementSize。如何在map["key1"] = "Value1"执行后,恰当地自增长elementSize?是个问题。毕竟不能像AOP那样地给map["key1"] = "Value1"操作再加一个回调函数。
c) 不论是遍历式还是注册式,它们有一个共性问题,就是如何区分开Object原有的属性和通过map["key1"] = "Value1"方式新加的属性?Object原有的属性又有哪些?
4, 经过3的思考,感觉可以参考JavaScript中Array类的实现,那么这个Array是怎么实现的?能不能像看JDK中的ArrayList那样地看这个Array的源码?
5, 既然有Array,为什么当初设计JavaScript时,没有把Map的实现加进来?
由实现JavaScript中的Map想到的的更多相关文章
- ES6新特性:Javascript中的Map和WeakMap对象
Map对象 Map对象是一种有对应 键/值 对的对象, JS的Object也是 键/值 对的对象 : ES6中Map相对于Object对象有几个区别: 1:Object对象有原型, 也就是说他有默认的 ...
- JavaScript中的Map
1.首先,在新版本的浏览器中,已经实现了对Map的原生支持:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glob ...
- JavaScript 中的 Map
很多编程语言中都有类似Map这种 键-值对 的数据结构. 可惜,JavaScript没有. 幸运的是,可以自己构建一个Map对象. 对象的定义 <script type="text/j ...
- JavaScript中数组map()方法
JavaScript 数组map()方法创建一个新的数组使用调用此数组中的每个元素上所提供的函数的结果.语法 ? 1 array.map(callback[, thisObject]); 下面是参数的 ...
- JavaScript中的Map和Set
JavaScript的默认对象表示方法{}可以视为其他语言中的Map或者Dictionary的数据结构,即一组键值对. 但是JavaScript的对象有个小问题,就是键必须是字符串,但实际上Numbe ...
- JavaScript中的map方法
假设有一个函数f(x)=x²;作用在一个数组[1,2,3,4,5,6,7,8,9],通常我们会用遍历的方法来实现. function f(x){ return x * x; } var arr = [ ...
- javascript中使用Map
mis.comm.js.Map = function() { this.elements = new Array(); //获取MAP元素个数 this.size = function() { ret ...
- javascript中的map和reduce
今天在看“廖雪峰官方网站”的js教程时,看到了map和reduce.其中有一个练习题是:不使用js内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数(先将 ...
- JavaScript中的Map、Set及其遍历
Map Map是一组键值对的结构,具有极快的查找速度. Map的定义. //空map设值key-value var m = new Map(); m.set("XiaoMing", ...
随机推荐
- [转] C# TextBox、DataGrideView中的数据绑定
Xavierr 原文 C#数据绑定——简单的文本框绑定.DataGridView 一.TextBox的数据绑定 经常写用一个TextBox显示某个对象,然后编辑之后再保存的程序.以前都是在TextBo ...
- Android圆形图片--ImageView
[ RoundImageView.java ] package com.dxd.roundimageview; import android.content.Context; import andro ...
- 又一枚神器:nginx
一直听说过nginx的大名,也自己装过,但是未直接使用其各种牛X的功能. 今天试用了一下,只能用两字感叹:牛逼!比如它提供的配置检查功能,真是贴心极了,又比如我想要的静态内容浏览器端缓存功能,动态内容 ...
- Linux 权限相关
Linux中,所有文件都有 三种权限:User ,Group,Other 三个文件: /etc/passwd :包括所有系统账号,一般用户身份和root信息 /etc/shadow :保存个人密码 / ...
- 初识Rest、JSR、JCP、JAX-RS及Jersey
REST:即表述性状态传递(英文:Representational State Transfer,简称REST)是一种分布式应用的架构风格,也是一种大流量分布式应用的设计方法论. JSR是Java S ...
- [翻译]创建ASP.NET WebApi RESTful 服务(9)
一旦成功的发布API后,使用者将依赖于你所提供的服务.但是变更总是无法避免的,因此谨慎的制定ASP.NET Web API的版本策略就变得非常重要.一般来说,新的功能需要无缝的接入,有时新老版本需要并 ...
- <转>Linux环境进程间通信(二): 信号(下)
原文地址为:http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index2.html 原文为: 一.信号生命周期 从信号发送到信号处理函数的 ...
- Awk中调用shell命令
Awk中调用shell命令 需求 在awk中,有时候需要调用linux系统中命令,如计算字符串的MD5值,并保存下来. 方法参考 call a shell command from inside aw ...
- 如何防止ASP.NET网站遭受CSRF的攻击
转载地址: http://www.cnblogs.com/shanyou/p/5038794.html?hmsr=toutiao.io&utm_medium=toutiao.io&ut ...
- LeetCode 刷题记录
写在前面:因为要准备面试,开始了在[LeetCode]上刷题的历程.LeetCode上一共有大约150道题目,本文记录我在<http://oj.leetcode.com>上AC的所有题目, ...