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中利用数组实现的循环队列代码
Jan 24 Javascript
toggle()隐藏问题的解决方法
Feb 17 Javascript
JQuery实现样式设置、追加、移除与切换的方法
Jun 11 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
Aug 11 Javascript
Angular 中 select指令用法详解
Sep 29 Javascript
js 数字、字符串、布尔值的转换方法(必看)
Apr 07 Javascript
form表单序列化详解(推荐)
Aug 15 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
node实现登录图片验证码的示例代码
Apr 20 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
Jan 27 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
图解上海144收音机
2021/03/02 无线电
php 获取SWF动画截图示例代码
2014/02/10 PHP
php实现倒计时效果
2015/12/19 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
PHP时间处理类操作示例
2018/09/05 PHP
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
jQuery示例收集
2010/11/05 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
js出生日期 年月日级联菜单示例代码
2014/01/10 Javascript
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
webpack4 optimization使用总结
2019/11/10 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
python实现点击按钮修改数据的方法
2019/07/17 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
python实现xml转json文件的示例代码
2020/12/30 Python
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
领导欢送会主持词
2015/07/06 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang