var Hash = { //定义一个对象叫Hash
    pair: function() { //定义pair方法
if (arguments.length % 2 != 0) { //arguments是包含所有参数的数组,本身就存在,如果参数的个数余2不等于0,抛异常
  _throw('Hash.pair: expecting an even number of arguments'); 

var obj = {}; //定义一个obj对象
for (var i = 0; i < arguments.length; i += 2) { //循环遍历所有参数
   var key = arguments[i]; 
   var val = arguments[i + 1]; 
   obj[key] = val; //把obj对象中的key属性赋值为val

return obj; //返回obj对象
   },    drop: function(obj, key) { //定义drop方法
delete obj[key]; //删除obj对明中的属性key
   },    drop_fully: function(obj, key) { //定义drop_fully方法
if (bt.ie) { //这句不知道是什么意思
var copy = {}; //定义copy对象
for (var temp in obj) { //遍历obj对象中的所有属性
if (key != temp) copy[temp] = obj[temp]; //如果不是所要求的属性,则赋值到copy对象中

return copy; //返回copy对象
} else { 
delete obj[key]; //删除obj对象中的属性key
return obj; //返回obj对象

  },   size: function(obj) { //定义size方法
var size = 0; //定义一个变量size为0
for (var key in obj) { //遍历obj中的所有属性
if (obj[key] != null) size++; //如果属性不为null,size加1

return size; //返回size
  },   keys: function(obj) { //定义keys方法
var keys = []; //定义一个数组keys
for (var key in obj) { //遍历对象obj
keys.push(key); //将每一个属性名都加到数组keys中

return keys; //返回数组keys
  },   values: function(obj) { //定义values方法
var vals = []; //定义一个数组vals
for (var key in obj) { //遍历对象obj
vals.push(obj[key]); //将属性加至vals中
  } 
return vals; 
  },   num_keys: function(obj) { //定义num_keys方法
var keys = []; //定义数组keys
for (var key in obj) { //遍历obj中的所有属性
keys.push(parseInt(key)); //将属性名转换成int型后加至keys中

return keys; 
  },   copy: function(obj) { //定义copy方法
var copy = {}; //定义一个对象copy
for (var key in obj) { //遍历obj
copy[key] = obj[key]; //将obj中所有属性赋值给copy对象

return copy; //返回对象copy
  },   getn: function(obj, keys) { //定义getn方法
if (obj == null) { //如果对象为null,返回null
return null; 

if (keys == '') { //如果keys为'',返回空数组
return []; 

keys = keys.split(' '); //将keys以' '来分隔成数组
var vals = []; 
for (var i = 0; i < keys.length; i++) { 
var key = keys[i]; //取得keys中的元素
var val = obj[key]; //将对象obj中的属性key赋值给val
vals.push(val); //将val加至数组vals中

return vals; //返回数组vals
  } };