看了很多ECMAScript,心血来潮写了个简单的模仿JAVA中HashMap的js对象,对泛型简单的实现java
//用闭包模式把对象定义到Window上,避免属性名称的值被篡改 (function(win){ var HashMap = function(keyType,valueType){ this.length = 0 ; this._keys = []; this._values = []; this.size = function(){ return this.length; }; this.put = function(key,value){ if(!keyType && !valueType){ //对没有定义存储类型的Map for(var i in this._keys){ if(this._keys[i] == key){ this._values[i] = value; return; } } this._keys.push(key); this._values.push(value); this.length++; }else{ //定义了类型的 new HashMap("string",Object); if(typeof(key) == keyType && (value instanceof valueType)){ for(var i in this._keys){ if(this._keys[i] == key){ this._values[i] = value; return; } } this._keys.push(key); this._values.push(value); this.length++; }else{ alert("对象类型不符合"); } } }; this.get = function(key){ for(var i in this._keys){ if(this._keys[i] == key){ return this._values[i]; } } return null; }; this.remove = function(key){ for(var i in this._keys){ if(this._keys[i] == key){ var temp = this._values[i]; //删除key this._keys = this._keys.slice(0,i).concat(this._keys.slice(++i)); //删除key对应的value this._values = this._keys.slice(0,--i).concat(this._keys.slice(++i)); this.length--; return temp; } } return null; }; this.isEmpty = function(){ return this.length == 0; }; this.clear = function(){ this.length = 0; this._keys = []; this._values = []; }; this.putAllMap = function(map){ if(map instanceof HashMap){ this._keys.concat(map._keys); this._values.concat(map._values); this.length += map.length; }else{ throw new Error("不为HashMap对象") } }; this.containsKey = function(key){ for(var i in this._keys){ if(this._keys[i] == key){ return true; } } return false; }; this.keysClone = function(){ var keys = []; for(var i in this._keys){ keys.push(this._keys[i]); } return keys; }; this.toString = function(){ //此方法要求存储对象实现了toString()方法 var data = "{"; for(var i in this._keys){ data += this._keys[i] +":" + this._values[i].toString() +","; } data = data.substring(0,data.length-1)+"}"; return data; } } win.HashMap = HashMap; })(window); function Dog(name){ this.name = name; this.toString = function(){ return this.name; } } //使用 var map = new HashMap('string',Dog); //此map只存放 key为stirng类型,value是用new Dog("")生产的对象 map.put("杰克",new Dog("杰克")); map.put("汤姆",new Dog("汤姆")); map.put("大神",new Dog("大神")); map.put("小仙",new Dog("小仙")); alert(map.remove("大神").toString());
java中Map不少方法没实现,还须要补充。。。。待续闭包