Prototype hash用法小结
来源:互联网 发布:企业邮箱 多域名绑定 编辑:程序博客网 时间:2024/06/01 08:54
Hash 可以看作是一个 关联数组,它对每一个值都绑定了一个唯一的键(值并不必须是唯一的), 然而,它不能保证迭代时元素的顺序始终一致。因为 JavaScript 程序语言的特性,每个对象实际上都是一个 hash,但是,本篇所述的 Hash
增加了许多方法,让你能够轻松地枚举键和值、迭代“键/值”对、 合并两个 hash、将 hash 编码成为一个查询字符串等等。
创建一个 hash
构造一个 Hash
实例有两种方法:第一种是使用 new
关键字实例化一个 JavaScript 对象(new Hash(obj)
)。第二种是使用 $H 函数。传递一个 JavaScript 对象或是一个 Hash 给 $H
,$H
函数会克隆它们,并不会对原始对象造成任何影响。
对于上述两种构造方法,你也可以不传递任何参数而调用它们。它们将返回一个空的 hash。
在 Prototype 1.6 中的后向兼容性变更
后向兼容性变更 - 虽然新版本的 Hash 与之前的版本具有相同的目标,但是新版本的 Hash 不再兼容先前版本的 Hash 类型。
现在,不能再通过 Hash
实例的属性来访问“键/值”对,它们是私有的,这是为了防止在 Hash
实例上定义的属性和混入的方法引起键的冲突。这意味着你必须使用 Hash#get(key)、 Hash#set(key, value) 和 Hash#unset(key) 实例方法来访问、设置或删除“键/值”对。例如:
var myhash = new Hash(); // 老的 API --> 新的 API myhash.name = "Bob";-->myhash.set('name', 'Bob'); myhash.name;-->myhash.get('name'); delete myhash.name;-->myhash.unset('name');
你也应该了解关于 Hash API 的其它变更:
$H(object)
快捷方法现在完全等同于new Hash(object)
。无论参数是一个对象还是另一个Hash
,它们都返回一个新的对象。Hash#merge
返回一个新的Hash
,而不再是对调用该方法的实例对象进行修改。Hash#update
是Hash#merge
的一个破坏性版本,它会修改调用该方法的实例对象。Hash#clone
返回一个新的当前 Hash 对象的克隆实例。Hash#toObject
返回一个当前 Hash 内部对象的复本。
译注:Prototype 使用了一个单独的内部对象来存储“键/值”对。Hash.toQueryString
现在是Object.toQueryString
的一个别名。(Hash.toQueryString
已不推荐使用,在将来的 Prototype 版本中,这个方法将会被移除。)Hash#remove
已经被Hash#unset
取代。Hash.toJSON
已经被Object.toJSON
或Hash#toJSON
实例方法取代。
注意,对于 Prototype 的早期版本(< 1.6)
传递一个 hash 到 $H
并不会克隆它。
因为混入了 Enumerable,同时,它还有自己的方法,所以 Hash
不是所有的名称都可以用作“键”的。如果新增的键的名称与 Hash
的任何一个方法同名,则那个方法不能再被调用。 即使因为你不需要调用那个方法而侥幸获得成功,但仍然会有问题:
var h = new Hash({ ... }); h['each'] = 'my own stuff';h.map(); // -> 错误,因为 'each' 不再是一个函数
在 Enumerable 中,最重要的方法是 each, 因为几乎每一个其它的方法都需要它——覆盖它将导致我们的 hash 实例成为一个废物。你也不能抱着侥幸心理使用 _each
,因为它也是 Enumerable
内部的一个重要方法。
方法
clone1.6
clone() -> newHash
返回一个 hash 的克隆。
each
each(iterator) -> Hash
迭代处理 hash 中的“键/值”对。
get1.6
get(key) -> value
返回 hash 指定键对应的值。
inspect
inspect() -> String
返回 hash 针对调试的字符串表现形式。
keys
keys() -> [String...]
返回一个数组,该数组包括 hash 中所有的键的名称。
merge1.6 改进
merge(object) -> newHash
将 object
和当前的 hash 实例合并,返回合并后的结果。在 v1.6.0 之前: 这是一个破坏性的方法(对象的值将会被增加到当前 hash 中)。从 v1.6.0 开始: 这不再是一个破坏性的方法(在合并之前,hash 已被克隆)。
remove不推荐
remove(key) -> valueremove(key1, key2...) -> Array
从 hash 中移除指定的键,并返回被移除的键对应的值。从 v1.6.0 开始,该方法不可用。
set1.6
set(key, value) -> value
将 hash 中 key
指定的键的值设置为 value
,返回所设置的值(value
)。 译注:如果不存在指定的键,则新增。
toJSON1.5.1
toJSON() -> String
返回一个 JSON 字符串。
toObject1.6
toObject() -> Object
克隆 hash 内部的 Object
并返回。译注:Hash
在内部使用一个单独的 Object
保存“键/值”对。
toQueryString1.6 改进
toQueryString() -> String
将一个 hash 转换为 URL 编码字符串形式。
unset1.6
unset(key) -> value
删除 hash 中的键,并返回键对应的值。
update1.6
update(object) -> Hash
使用参数 object
包含的“键/值”对更新当前 hash。原始的 hash 对象将会被修改。
values
values() -> Array
返回一个数组,该数组是 hash 中所有的值的集合。
- Prototype hash用法小结
- Prototype使用Hash对象
- hash 小结
- Hash小结
- prototype 用法
- hash url hash用法
- JavaScript prototype, MD5 hash value
- Consistent Hash 一致性Hash小结
- hash用法
- 散列hash小结
- Hash表基础小结
- Hash表算法小结
- hash表小结
- prototype的each用法
- prototype的bind用法
- javascript Prototype 用法
- prototype.js用法介绍
- js中prototype用法
- lucene 分词学习
- 悟透JavaScript的摘录
- 在SQL中删除重复记录(多种方法)
- Microsoft OLE DB Provider for SQL Server 错误 '80040e31' 超时已过期
- API技巧集
- Prototype hash用法小结
- 社会网络分析方法和IWOM研究的结合初探
- 以创新起航,分享千亿3G投资机会
- 如何学好java---技术总监给新进技术人员的建议
- vim & cscope[zz]
- 使用.Net程序连接MySql数据库时,请注意你的License
- vc++ LINK : fatal error LNK1207: incompatible PDB format in
- 批处理加载执行注册表
- java对象拷贝(java反射)