js任何对象都是一个hash表

好像记得c语言刚开始的时候就问什么是程序,给出的答案是算法加数据结构就是程序。直到今天我觉得自己没有彻底理解这句话。不过对于算法和数据结构的重要性到是深有体会,特别是数据结构。基本都是围绕它来转的。甚至从微机原理开始就开始大把大把的使用stack,fifo这些。

    js提供的原始数据结构好像就是数组,数组也却是是最简单最强大的工具,但很多情况下,也需要一些key对应value。这种hash结构那里找?任何js对象都是!!底层如何实现的不大清楚,但是越看一些库类,越发现把对象当hash使用的平凡。

  1. //just a object   
  2. var hash = {};   
  3. hash["key1"] = 123;   
  4. hash["key2"] = "456";   
  5. alert(hash["key1"]);   
  6.   
  7. //function   
  8. var fun = function(){   
  9.     return "";   
  10. }   
  11. fun["aa"] = "123";   
  12. fun["bb"] = "456";   
  13. alert(fun["aa"]);  
//just a objectvar hash = {};hash["key1"] = 123;hash["key2"] = "456";alert(hash["key1"]);//function var fun = function(){ return "";}fun["aa"] = "123";fun["bb"] = "456";alert(fun["aa"]);

只要是对象他都可以被当作hash处理,我觉得多出一种常用的原生态支持数据结构,对一门语言来说是非常有竞争力的,但很少看到有如此介绍的,难道是我理解有问题??

  1. //包括dom对象也是能够当作hash处理的   
  2. var ele = document.getElementById("eleId");   
  3. //可以随便赋值   
  4. ele["attr1"] = "whatever attr";   
  5. ele["key"] = 123;   
  6.   
  7. //甚至dom的一些属性都是附在这个hash对象上的key   
  8. alert(ele["id"]); //他的id   
  9. alert(ele["name"]); //name 属性   
  10. alert(ele["onclick"]); //甚至连onclick属性如果赋了值 也能得到  
//包括dom对象也是能够当作hash处理的var ele = document.getElementById("eleId");//可以随便赋值ele["attr1"] = "whatever attr";ele["key"] = 123;//甚至dom的一些属性都是附在这个hash对象上的keyalert(ele["id"]); //他的idalert(ele["name"]); //name 属性alert(ele["onclick"]); //甚至连onclick属性如果赋了值 也能得到

困惑的问题来了,id居然可以通过hash表那样取,非常的方便,为啥还要通过dom来取呢?符合xml的dom规范?如果纯把dom对象看成hash很多问题都可以简化。很多库类,以jquery为例,事件的trigger,很不错,似乎就是通过类似方式来实现的。

  1. //包括dom对象也是能够当作hash处理的   
  2. var ele = document.getElementById("eleId");   
  3. alert(ele["onclick"]); //实际得到的是一个函数   
  4. ele["onclick"] (); //执行该函数,这就实现了onclick的trigger  
//包括dom对象也是能够当作hash处理的var ele = document.getElementById("eleId");alert(ele["onclick"]); //实际得到的是一个函数ele["onclick"] (); //执行该函数,这就实现了onclick的trigger

按照hash的思路,js对象的reflection,和方法的调用就非常容易理解

  1. //包括dom对象也是能够当作hash处理的   
  2. var ele = document.getElementById("eleId");   
  3. for(var prop in ele){   
  4.      alert(prop);//属性或者方法   
  5.      ele[prop] (); //如果是方法,明显可以这么来执行,当然如果不是方法会出错,判断一下就可以,哈哈哈哈哈   
  6. }  
//包括dom对象也是能够当作hash处理的var ele = document.getElementById("eleId");for(var prop in ele){ alert(prop);//属性或者方法 ele[prop] (); //如果是方法,明显可以这么来执行,当然如果不是方法会出错,判断一下就可以,哈哈哈哈哈}

总结来说就两点

1,js多了一种常用数据结构

2,reflection的强大支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值