js提供的原始數據結構好像就是數組,數組也卻是是最簡單最強大的工具,但很多情況下,也需要一些key對應value。這種hash結構那裏找?任何js對象都是!!底層如何實現的不大清楚,但是越看一些庫類,越發現把對象當hash使用的平凡。
- //just a object
- var 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處理,我覺得多出一種常用的原生態支持數據結構,對一門語言來說是非常有競爭力的,但很少看到有如此介紹的,難道是我理解有問題??
- //包括dom對象也是能夠當作hash處理的
- var ele = document.getElementById("eleId");
- //可以隨便賦值
- ele["attr1"] = "whatever attr";
- ele["key"] = 123;
- //甚至dom的一些屬性都是附在這個hash對象上的key
- alert(ele["id"]); //他的id
- alert(ele["name"]); //name 屬性
- alert(ele["onclick"]); //甚至連onclick屬性如果賦了值 也能得到
困惑的問題來了,id居然可以通過hash表那樣取,非常的方便,爲啥還要通過dom來取呢?符合xml的dom規範?如果純把dom對象看成hash很多問題都可以簡化。很多庫類,以jquery爲例,事件的trigger,很不錯,似乎就是通過類似方式來實現的。
- //包括dom對象也是能夠當作hash處理的
- var ele = document.getElementById("eleId");
- alert(ele["onclick"]); //實際得到的是一個函數
- ele["onclick"] (); //執行該函數,這就實現了onclick的trigger
按照hash的思路,js對象的reflection,和方法的調用就非常容易理解
- //包括dom對象也是能夠當作hash處理的
- var ele = document.getElementById("eleId");
- for(var prop in ele){
- alert(prop);//屬性或者方法
- ele[prop] (); //如果是方法,明顯可以這麼來執行,當然如果不是方法會出錯,判斷一下就可以,哈哈哈哈哈
- }
總結來說就兩點
1,js多了一種常用數據結構
2,reflection的強大支持