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 出生日期和身份证判断大全
Nov 13 Javascript
常用Extjs工具:Extjs.util.Format使用方法
Mar 22 Javascript
javascript测试题练习代码
Oct 10 Javascript
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
基于Flowplayer打造一款免费的WEB视频播放器附源码
Sep 06 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
Sep 27 Javascript
动态加载js文件简单示例
Apr 21 Javascript
jQuery封装的屏幕居中提示信息代码
Jun 08 Javascript
bootstrap弹出层的多种触发方式
May 10 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
angular.extend方法的具体使用
Sep 14 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 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实现通过照片获取ip地址
2016/04/26 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
JS获取浏览器语言动态加载JS文件示例代码
2014/10/31 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
15个常用的jquery代码片段
2015/12/19 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
分享python数据统计的一些小技巧
2016/07/21 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
python并发和异步编程实例
2018/11/15 Python
python try 异常处理(史上最全)
2019/03/07 Python
python制作图片缩略图
2019/04/30 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
幼师自荐信范文
2015/03/06 职场文书
在Python中如何使用yield
2021/06/07 Python
基于MySql验证的vsftpd虚拟用户
2021/11/07 MySQL