当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Prototype Hash对象 学习

Javascript
[JS源码]超长文章自动分页(客户端版)
注意 JavaScript 中 RegExp 对象的 test 方法
JavaScript快速排序
写的一段拖动对象的代码
用js取得鼠标所在位置的对象
如何在一段文字里点一下就可以在里面插入一段文字?
用js+cookie记录滚动条位置
记录滚动条位置(使用userdate)
强效、方便的表单通用检测JS 不错
个人总结的一些关于String、Function、Array的属性和用法
数据排序谁最快(javascript中的Array.prototype.sort PK 快速排序)
Prototype最新版(1.5 rc2)使用指南(1)
Prototype使用指南之string.js
Prototype使用指南之base.js
Prototype使用指南之enumerable.js
Prototype使用指南之array.js
Prototype使用指南之range.js
Prototype使用指南之ajax
Prototype使用指南之dom.js
Prototype使用指南之selector.js

Javascript 中的 Prototype Hash对象 学习


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 382 ::
收藏到网摘: n/a

这个对象相当于Java中的HashMap,当然了功能没HashMap那么强大。提供一直基本的方法,简单的方法就不在源码中注释了。
复制代码 代码如下:

//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对象