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常用函数 不错
Sep 08 Javascript
有效的捕获JavaScript焦点的方法小结
Oct 08 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
Jul 13 Javascript
浏览器页面区域大小的js获取方法
Sep 21 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
Jan 14 Javascript
从零学JS之你需要了解的几本书
May 19 Javascript
jquery实现键盘左右翻页特效
Apr 30 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
理解 Node.js 事件驱动机制的原理
Aug 16 Javascript
vue实现手机号码抽奖上下滚动动画示例
Oct 18 Javascript
基于node.js实现微信支付退款功能
Dec 19 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 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批量去除文件UTF8 BOM信息
2013/08/05 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
只需20行代码就可以写出CSS覆盖率测试脚本
2013/04/24 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
jquery插件star-rating.js实现星级评分特效
2015/04/15 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
Python基于twisted实现简单的web服务器
2014/09/29 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
python抽象基类用法实例分析
2015/06/04 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
python设置中文界面实例方法
2020/10/27 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
中学教师培训制度
2014/01/31 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
分层教学实施方案
2014/03/19 职场文书
物流管理专业毕业生求职信
2014/03/23 职场文书
道德之星事迹材料
2014/05/03 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
幼儿教师三分钟演讲稿
2019/06/21 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js
JavaScript的function函数详细介绍
2021/11/20 Javascript
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server