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 相关文章推荐
漂亮的仿flash菜单,来自蓝色经典
Jun 26 Javascript
JavaScript中的私有成员
Sep 18 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
Jul 02 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
Dec 18 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
Jan 11 Javascript
js css自定义分页效果
Feb 24 Javascript
简单实现js拖拽效果
Jul 25 Javascript
vue-cli脚手架引入图片的几种方法总结
Mar 13 Javascript
微信小程序 数据缓存实现方法详解
Aug 26 Javascript
微信小程序实现天气预报功能(附源码)
Dec 10 Javascript
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
小程序实现筛子抽奖
May 26 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第一季视频教程(李炎恢+php100 不断更新)
2011/05/29 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
JavaScript私有变量实例详解
2019/01/24 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
详解Python多线程
2016/11/14 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python/sympy求解矩阵方程的方法
2018/11/08 Python
使用django实现一个代码发布系统
2019/07/18 Python
python2 中 unicode 和 str 之间的转换及与python3 str 的区别
2019/07/25 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
2014年村党支部工作总结
2014/12/04 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
深入理解python多线程编程
2021/04/18 Python