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 MD4
Dec 20 Javascript
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
自己开发Dojo的建议框架
Sep 24 Javascript
浅谈Javascript事件模拟
Jun 27 Javascript
javascript的propertyIsEnumerable()方法使用介绍
Apr 09 Javascript
jQuery实现购物车多物品数量的加减+总价计算
Jun 06 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
Mar 06 Javascript
jQuery Jsonp跨域模拟搜索引擎
Jun 17 jQuery
vue2.0 实现导航守卫的具体用法(路由守卫)
May 17 Javascript
ant-design-vue按需加载的坑的解决
May 14 Javascript
JSON 入门教程基础篇 json入门学习笔记
Sep 22 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
NOT NULL 和NULL
2007/01/15 PHP
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
学习js所必须要知道的一些
2007/03/07 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
银行财务部实习生的自我鉴定
2013/11/27 职场文书
小学安全教育材料
2014/02/17 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
求职信内容怎么写
2014/05/26 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
合作与交流自我评价
2015/03/09 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
学校运动会感想
2015/08/10 职场文书
2016入党积极分子党校培训心得体会
2016/01/06 职场文书