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的強大支持

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章