每一个对象在new之前都会调用一个function,我们可以调用对象的constructor属性来看构造函数
如object的function为:
function Object(){
//native code;
}
数组对象的function为:
function Array(){
//native code;
}
有了以上的基础之后,那么我们明白,模拟Java的map类应该这样构造
var m = new Map();
可是,map这个对象从何而来,对,我们必须封装一个function供map调用。下面我们从对象到方法一步步的开始模拟Java的Map
1、构造Map函数
function Map(){
var obj = {};//空的对象容器,用来盛放键值对
}
简单吧,至此,Map的函数已经封装好了。
2、添加put方法
我们知道,map类是有put方法的,那么我们在js中需要封装put方法,具体的步骤如下
function Map(){
var obj = {};
//添加put方法
this.put = function(key,value){
obj[key] = value;
}
}
var m = new Map();
m.put("1","zhang");
m.put("2","wang");
m.put("3","li");
3、添加size方法
function Map(){
var obj = {};
//添加put方法
this.put = function(key,value){
obj[key] = value;
}
this.size = function(key,value){
var count = 0;
for(var attr in obj){
count++;
}
return count;
}
}
4、添加get方法
this.get = function(key){
if(obj[key] || obj[key] === 0 || obj[key] === false){
return obj[key];
}else{
return null;
}
}
5、添加remove方法
this.remove = function(key){
if(obj[key] || obj[key] === 0 || obj[key] === false){
delete obj[key];
}
}
6、添加遍历方法
this.eachMap = function(fn){
for(var attr in obj){
fn(attr,obj[attr]);
}
}
7、最后总的代码如下:
<html>
<head>
<script type="text/javascript">
function Map(){
var obj = {};
//添加put方法
this.put = function(key,value){
obj[key] = value;
}
this.size = function(){
var count = 0;
for(var attr in obj){
count++;
}
return count;
}
this.get = function(key){
if(obj[key] || obj[key] === 0 || obj[key] === false){
return obj[key];
}else{
return null;
}
}
this.remove = function(key){
if(obj[key] || obj[key] === 0 || obj[key] === false){
delete obj[key];
}
}
this.eachMap = function(fn){
for(var attr in obj){
fn(attr,obj[attr]);
}
}
}
var m = new Map();
m.put("1","zhang");
m.put("2","wang");
m.put("3","li");
//m.remove("3");
//alert(m.get("3"));
m.eachMap(function(key,value){
alert(key+":"+value);
});
</script>
</head>
<body>
</body>
</html>
好了,到此,一个map对象就做完了。