Prototype Hash对象 学习


Posted in Javascript onJuly 19, 2009
//Hash对象的工具函数 
function $H(object) { 
return new Hash(object); 
}; var Hash = Class.create(Enumerable, (function() { 
//初始化,创建一个新的Hash对象 
function initialize(object) { 
this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); 
} 
//覆盖Enumerable里面的方法,遍历Hash对象时会用到 
function _each(iterator) { 
for (var key in this._object) { 
var value = this._object[key], pair = [key, value]; 
pair.key = key; 
pair.value = value; 
iterator(pair); 
} 
} 
function set(key, value) { 
return this._object[key] = value; 
} 
function get(key) { 
if (this._object[key] !== Object.prototype[key]) 
return this._object[key]; 
} 
function unset(key) { 
var value = this._object[key]; 
delete this._object[key]; 
return value; 
} 
function toObject() { 
return Object.clone(this._object); 
} 
function keys() { 
return this.pluck('key'); 
} 
function values() { 
return this.pluck('value'); 
} 
//返回value的key 
function index(value) { 
var match = this.detect(function(pair) { 
return pair.value === value; 
}); 
return match && match.key; 
} 
function merge(object) { 
return this.clone().update(object); 
} 
//更新原有Hash对象,把object参数内的键值对更新到原Hash对象 
function update(object) { 
return new Hash(object).inject(this, function(result, pair) { 
result.set(pair.key, pair.value); 
return result; 
}); 
} 
function toQueryPair(key, value) { 
if (Object.isUndefined(value)) return key; 
return key + '=' + encodeURIComponent(String.interpret(value)); 
} 
function toQueryString() { 
return this.inject([], function(results, pair) { 
var key = encodeURIComponent(pair.key), values = pair.value; 
if (values && typeof values == 'object') { 
if (Object.isArray(values)) 
return results.concat(values.map(toQueryPair.curry(key))); 
} else results.push(toQueryPair(key, values)); 
return results; 
}).join('&'); 
} 
function inspect() { 
return '#<Hash:{' + this.map(function(pair) { 
return pair.map(Object.inspect).join(': '); 
}).join(', ') + '}>'; 
} 
function toJSON() { 
return Object.toJSON(this.toObject()); 
} 
function clone() { 
return new Hash(this); 
} 
return { 
initialize: initialize, 
_each: _each, 
set: set, 
get: get, 
unset: unset, 
toObject: toObject, 
toTemplateReplacements: toObject, 
keys: keys, 
values: values, 
index: index, 
merge: merge, 
update: update, 
toQueryString: toQueryString, 
inspect: inspect, 
toJSON: toJSON, 
clone: clone 
}; 
})()); 
Hash.from = $H;

clone
each
get
inspect
keys
merge
remove
set
toJSON
toObject
toQueryString
unset
update
value
给出一些方法的示例,简单的方法就略过了
toQueryString():
$H({ action: 'ship', order_id: 123, fees: ['f1', 'f2'], 'label': 'a demo' }).toQueryString() 
// -> 'action=ship&order_id=123&fees=f1&fees=f2&label=a%20demo' // an empty hash is an empty query string: 
$H().toQueryString() 
// -> ''

update():
var h = $H({ name: 'Prototype', version: 1.5 }); 
h.update({ version: 1.6, author: 'Sam' }).inspect(); 
// -> #<Hash:{'name': 'Prototype', 'version': 1.6, 'author': 'Sam'}> h.inspect(); 
// -> #<Hash:{'name': 'Prototype', 'version': 1.6, 'author': 'Sam'}> 
//注意这里会改变原来的Hash对象

merge():
var h = $H({ name: 'Prototype', version: 1.5 }); 
h.merge({ version: 1.6, author: 'Sam' }).inspect(); 
// -> #<Hash:{'name': 'Prototype', 'version': 1.6, 'author': 'Sam'}> h.inspect(); 
// -> #<Hash:{'name': 'Prototype', 'version': 1.5}> 
//注意这里不改变原有Hash对象
Javascript 相关文章推荐
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
Mar 08 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
Oct 20 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
Javascript实现颜色rgb与16进制转换的方法
Apr 18 Javascript
javascript数组去重方法汇总
Apr 23 Javascript
node.js中express中间件body-parser的介绍与用法详解
May 23 Javascript
webpack构建react多页面应用详解
Sep 15 Javascript
详解Node.js模板引擎Jade入门
Jan 19 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
详解如何使用router-link对象方式传递参数?
May 02 Javascript
微信小程序自定义toast组件的方法详解【含动画】
May 11 Javascript
vue基本使用--refs获取组件或元素的实例
Nov 07 Javascript
Prototype Array对象 学习
Jul 19 #Javascript
Prototype PeriodicalExecuter对象 学习
Jul 19 #Javascript
Prototype String对象 学习
Jul 19 #Javascript
Prototype Template对象 学习
Jul 19 #Javascript
Prototype Number对象 学习
Jul 19 #Javascript
Prototype ObjectRange对象学习
Jul 19 #Javascript
Prototype RegExp对象 学习
Jul 19 #Javascript
You might like
学习使用PHP数组
2006/10/09 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
PHP中把stdClass Object转array的几个方法
2014/05/08 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
python递归删除指定目录及其所有内容的方法
2017/01/13 Python
Java与Python两大幸存者谁更胜一筹呢
2018/04/12 Python
Python3.6简单反射操作示例
2018/06/14 Python
详解django自定义中间件处理
2018/11/21 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
劳资员岗位职责
2013/11/11 职场文书
影视艺术学院毕业生自荐信
2013/11/13 职场文书
担保书怎么写
2014/04/01 职场文书
房屋继承公证书
2014/04/10 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
五四青年节活动总结
2015/02/10 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
python使用glob检索文件的操作
2021/05/20 Python