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 !!的作用
Dec 04 Javascript
js与运算符和或运算符的妙用
Feb 14 Javascript
jQuery中Ajax的load方法详解
Jan 14 Javascript
如何利用Promises编写更优雅的JavaScript代码
May 17 Javascript
Bootstrap 手风琴菜单的实现代码
Jan 20 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
Vue.js实战之组件之间的数据传递
Apr 01 Javascript
jQuery判断邮箱格式对错实例代码讲解
Apr 12 jQuery
js实现canvas图片与img图片的相互转换的示例
Aug 31 Javascript
JS中FileReader类实现文件上传及时预览功能
Mar 27 Javascript
如何在selenium中使用js实现定位
Aug 18 Javascript
echarts实现晶体球面投影的实例教程
Oct 10 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.ini中文版
2006/10/09 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php中session与cookie的比较
2015/01/27 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
2017/01/18 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
基于pytorch的保存和加载模型参数的方法
2019/08/17 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
Conforama瑞士:家具、厨房、电器、装饰
2020/09/06 全球购物
实习评语
2013/12/16 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
年检委托书
2014/08/30 职场文书
中秋晚会活动方案
2014/08/31 职场文书
党员对照检查材料
2014/09/22 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
教师工作证明范本
2015/06/12 职场文书
学校教学管理制度
2015/08/06 职场文书
nginx配置文件使用环境变量的操作方法
2021/06/02 Servers
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
我收到了德劲DE1107
2022/04/05 无线电
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers