`

由实现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的实现加进来?

0
2
分享到:
评论

相关推荐

    javascript-whatever:无论我想到什么JavaScript

    描述中的“无论我想到什么JavaScript”则表明这个项目可能是作者随想随记的JavaScript知识点汇集,可能包含各种各样的主题,如DOM操作、事件处理、异步编程、ES6及更高版本的新特性、性能优化、错误处理等。...

    谷歌地图的标注隐藏与显示

    为了实现标注的显示与隐藏功能,开发者首先会想到使用`setVisible()`方法。但实际操作中却发现,仅通过设置`setVisible(false)`并不能完全隐藏一个标注,因为这只会隐藏图符,而标题仍然可见。这种现象可以用“鸵鸟...

    差量页面下载技术 - Diffable 的使用

    对于大型 Web 应用程序,比如 Google Map 这样的项目,它所用到的 JavaScript(后面简称 JS)文件会非常大,很多都在 500K 以上。庆幸的是我们拥有浏览器的缓存技术,在服务器端 JS 文件没有修改的情况下,客户端...

    my-project:这是一个网络应用,可在地图上显示使用Kakao Map API创建的附近药房的位置和详细信息。

    对使用电影API使用React实现电影Web服务的项目进行克隆编码,并且每次Web服务实现完成时都非常感兴趣,并最终介绍了电影当我完成Web服务的实现时,我回想起了我的愉悦和回忆,这次我想到了使用map API创建Web服务的...

    JavaScript Table行定位效果

    最后我用的方法是新建一个table,并把源tr克隆到新table中,然后通过对新table定位来实现效果。 用这个方法关键有两点,首先要做一个仿真度尽可能高的tr,还有是要准确的定位,这些请看后面的程序说明。 程序说明 ...

    可能被忽略的一些JavaScript数组方法细节

    标题和描述中提到了一些可能被忽略的JavaScript数组方法细节,包括push、concat、map和forEach等。下面,我们将详细解释这些方法的特点以及实际使用中可能被忽视的细节。 首先,我们来看push方法。push方法能够将一...

    旅行提示

    在旅行提示这个主题中,我们可能会想到如何利用JavaScript这一强大的编程语言来提升旅行体验。JavaScript是一种广泛用于网页和网络应用的脚本语言,它能够帮助我们实现动态交互、数据处理和用户界面优化等功能。在...

    review-assignment

    而“不是我能想到的”可能暗示任务中遇到了意料之外的挑战或者学习了新的知识。 【标签】:“JavaScript” 这个标签表明我们讨论的主题与JavaScript语言紧密相关。JavaScript是一种广泛应用于Web开发的脚本语言,...

    summary:杂七杂八的东西

    平时想到的一些杂七杂八的东西 版本 2021-02-19 将大屏展示弄成组件化 2018-11-30 添加了一些东西,也修改了一下里面的文件夹的结构,内容没有变 结构目录 aboutMap 关于地图的一些 BaiduMapTile使用C#写的,可以...

    KotlinDemo:用来练习kotlin

    描述中提到的“大杂烩,想到哪儿写哪儿”可能意味着这个项目包含了许多不同的Kotlin编程示例,涵盖了各种概念和技术,没有特定的组织结构,而是根据开发者的想法或需求随时添加和修改。这样的项目对于初学者来说是很...

Global site tag (gtag.js) - Google Analytics