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 相关文章推荐
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
网页实时显示服务器时间和javscript自运行时钟
Jun 09 Javascript
jQuery中first()方法用法实例
Jan 06 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
Feb 13 Javascript
JS仿淘宝实现的简单滑动门效果代码
Oct 14 Javascript
BootStrap智能表单demo示例详解
Jun 13 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
bootstrapValidator自定验证方法写法
Dec 01 Javascript
canvas 弹幕效果(实例分享)
Jan 11 Javascript
Vue实现自带的过滤器实例
Mar 09 Javascript
weui框架实现上传、预览和删除图片功能代码
Aug 24 Javascript
elementUI 设置input的只读或禁用的方法
Oct 30 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php array的学习笔记
2012/05/16 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
PHP getName()函数讲解
2019/02/03 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
深入理解JS DOM事件机制
2016/08/06 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
[40:16]TFT vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
利用python获得时间的实例说明
2013/03/25 Python
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
遗传算法之Python实现代码
2017/10/10 Python
Django Rest framework频率原理与限制
2019/07/26 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
python操作yaml说明
2020/04/08 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
JPA面试常见问题
2016/11/14 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
冬季安全检查方案
2014/05/23 职场文书
财务统计员岗位职责
2015/04/14 职场文书
QT与javascript交互数据的实现
2021/05/26 Javascript