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 相关文章推荐
extjs tabpanel限制选项卡数量实现思路及代码
Apr 02 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
Aug 06 Javascript
jQuery前端框架easyui使用Dialog时bug处理
Dec 05 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
Mar 08 Javascript
Vuejs 页面的区域化与组件封装的实现
Sep 11 Javascript
react同构实践之实现自己的同构模板
Mar 13 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
使用axios请求时,发送formData请求的示例
Oct 29 Javascript
原生js实现碰撞检测
Mar 12 Javascript
解决Can't find variable: SockJS vue项目的问题
Sep 22 Javascript
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
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开发中常用的字符串操作函数
2011/02/08 PHP
逆序二维数组插入一元素的php代码
2012/06/08 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
Javascript String.replace的妙用
2009/09/08 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
vue.js入门(3)——详解组件通信
2016/12/02 Javascript
Angularjs使用指令做表单校验的方法
2017/03/31 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
vue select 获取value和lable操作
2020/08/28 Javascript
python变量不能以数字打头详解
2016/07/06 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
Python3 max()函数基础用法
2019/02/19 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
如何通过python实现全排列
2020/02/11 Python
解决c++调用python中文乱码问题
2020/07/29 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
应届大学生自荐信
2013/12/05 职场文书
人事经理岗位职责
2014/04/28 职场文书
实习单位推荐信
2015/03/27 职场文书
公积金贷款承诺书
2015/04/30 职场文书
工程款申请报告
2015/05/15 职场文书
投诉信范文
2015/07/02 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
opencv用VS2013调试时用Image Watch插件查看图片
2021/07/26 Python