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判断是否已经弹出页面
Oct 20 Javascript
JavaScript入门之基本函数详解
Oct 21 Javascript
js 跳出页面的frameset框架示例介绍
Dec 23 Javascript
使用JQuery库提供的扩展功能实现自定义方法
Sep 09 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
Jan 21 Javascript
JQuery解析XML的方法小结
Apr 02 Javascript
基于JS代码实现图片在页面中旋转效果
Jun 16 Javascript
详解开源的JavaScript插件化框架MinimaJS
Oct 26 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
Feb 24 Javascript
vue-router定义元信息meta操作
Dec 07 Vue.js
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
Feb 23 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
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
PHP个人网站架设连环讲(四)
2006/10/09 PHP
PHP对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
JavaScript版代码高亮
2006/06/26 Javascript
游戏人文件夹程序 ver 3.0
2006/07/14 Javascript
破除一些网站复制、右键限制
2006/11/04 Javascript
JavaScript更改class和id的方法
2008/10/10 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
关于img的href和src取变量及赋值的方法
2014/04/28 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
JavaScript接口的实现三种方式(推荐)
2016/06/14 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
vue表单数据交互提交演示教程
2019/11/13 Javascript
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
python 输出所有大小写字母的方法
2019/01/02 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
最新奶茶店创业计划书范文
2014/02/08 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
学生逃课检讨书
2015/02/17 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书