isHash [1.6]
isHash(obj) -> Boolean
如果 obj 是一个 Hash 类的实例,返回 true,否则返回 false。
样例
Object.isHash(new Hash({ })); //-> true
Object.isHash($H({ })); //-> true
Object.isHash({ }); //-> false
values
values() -> Array
返回一个数组,该数组是 hash 中所有的值的集合。
返回的值的顺序取决于浏览器(基于“键”集合上的 for ... in 循环),因此——虽然大多数情况下, 它们的顺序是相同的——但是不能指望这个顺序。另外,记住 hash 中的值可能包含 null,甚至是 undefined。
样例
$H({ name: 'Prototype', version: 1.5 }).values().sort()
// -> [1.5, 'Prototype']
$H().values()
// -> []
...
update [1.6]
update(object) -> Hash
使用参数 object 包含的“键/值”对更新当前 hash。原始的 hash 对象将会被修改。
如果存在相同的“键”,原 hash 中该键对应的值会被参数 object 中的值覆盖。 这经常被用于选择性的修改一些指定“键”的值(例如:在一系列的选项上应用一些级别控制)。
参数 object 可以是一个 Hash 或者是一个普通的 Object。
样例
var h = $H({ name: 'Prototype', version: 1.5 });
h.update({ version: 1.6, author: 'Sam' }).inspect();
// -> #<Hash:{'name': 'Prototype', 'version': 1.6, 'author': 'Sam'}>
...
unset [1.6]
unset(key) -> value
删除 hash 中的键,并返回键对应的值。
样例
var h = new Hash({ a: 'apple', b: 'banana', c: 'coconut' });
h.unset('a');
// -> 'apple'
h.inspect();
// -> #<Hash:{'b': 'banana', 'c': 'coconut'}>
h.unset('d');
// -> undefined
h.inspect();
// -> #<Hash:{'b': 'banana', 'c': 'coconut'}>
...
toQueryString [1.6 改进]
toQueryString() -> String
将一个 hash 转换为 URL 编码字符串形式。
这是一种串行化的形式,常用于提供复合的参数集,例如为 Ajax 命名空间中的那些对象提供参数(如 Ajax.Request 的 parameters 选项)。
值为 undefined 的“键/值”对串行化后只保留了键名称。值为数组的“键/值”对会将数组的每个元素串行化为一个键值对。 所有的值都会使用 JavaScript 原生的 encodeURIComponent 方法获取 URI 编码。
除数组外(数组是按照元素在数组中的顺序进行串行化的),串行化后键值对的顺序并不保证总是一致的 (并且通常情况下查询...
toObject [1.6]
toObject() -> Object
克隆 hash 內部的 Object 并返回。译注:Hash 在内部使用一个单独的 Object 保存“键/值”对。
样例
var h = new Hash({ a: 'apple', b: 'banana', c: 'coconut' });
var obj = h.toObject();
Object.inspect(h);
// -> #<Hash:{'a': 'kiwi', 'b': 'banana', 'c': 'coconut'}>
Object.inspect(obj);
// -> [object Object]
obj.a = 'orange';
h.get('a');
// -> 'apple'
...
toJSON [1.5.1]
toJSON() -> String
返回一个 JSON 字符串。
样例
$H({name: 'Violet', occupation: 'character', age: 25 }).toJSON();
//-> '{"name": "Violet", "occupation": "character", "age": 25}'
set [1.6]
set(key, value) -> value
将 hash 中 key 指定的键的值设置为 value,返回所设置的值(value)。 译注:如果不存在指定的键,则新增。
样例
var h = new Hash({ a: 'apple', b: 'banana', c: 'coconut' });
h.set('d', 'orange');
// -> 'orange'
h.inspect();
// -> #<Hash:{'a': 'apple', 'b': 'banana', 'c': 'coconut', 'd': 'orange'}>
h.set('a', 'kiwi');
// -> 'kiwi'
h.inspect();
// -> #<Hash:{'a': 'kiwi', 'b': 'banana', 'c': 'coconut', 'd': 'orange'}>
...
remove [不推荐]
remove(key) -> value
remove(key1, key2...) -> Array
从 hash 中移除指定的键,并返回被移除的键对应的值。从 v1.6.0 开始,该方法不可用。
这个方法从 Prototype 1.6.0 开始不再可用。代替的方法是 Hash#unset(),后者只能从 Hash 实例中移除一个值,为移除多个值,请使用循环:
['foo', 'bar'].each(function(key) {
hash.unset(key);
});
样例
var h = new Hash({ a:'apple', b:'banana', c:'coconut' })
h.remove('a', 'c')
// -> ['apple', 'coconut']
h.values()
// -> ['banana']
...
merge [1.6 modified]
merge(object) -> newHash
将 object 和当前的 hash 实例合并,返回合并后的结果。在 v1.6.0 之前: 这是一个破坏性的方法(对象的值将会被增加到当前 hash 中)。从 v1.6.0 开始: 这不再是一个破坏性的方法(在合并之前,hash 已被克隆)。
如果存在相同的“键”,原 hash 中该键对应的值会被参数 object 中的值覆盖。 这经常被用于选择性的修改一些指定“键”的值(例如:在一系列的选项上应用一些级别控制)。
参数 object 可以是一个 Hash 或者是一个普通的 Object。
样例
从 1.6.0 开始,Hash#merge 返回一个新的 hash:
var h = $H({ name: ...
keys
keys() -> [String...]
返回一个数组,该数组包括 hash 中所有的键的名称。
注意:返回的键名称的顺序取决于浏览器(基于 for ... in 循环)。
样例
$H({ name: 'Prototype', version: 1.5 }).keys().sort()
// -> ['name', 'version']
$H().keys()
// -> []
inspect
inspect() -> String
返回 hash 针对调试的字符串表现形式。
关于 inspect 方法的更多信息,请查看 Object.inspect。
样例
$H({ name: 'Prototype', version: 1.5 }).inspect()
// -> "<#Hash:{name: 'Prototype', version: 1.5}>"
Hash 和它的“键/值”对的顺序
在 JavaScript 中,一个对象所拥有的“键/值”对的顺序 不一定 总是一致的——虽然这种情况很少见。因此, 不要根据该方法返回的字符串表现形式来比较两个 Hash 实例。
...
get [1.6]
get(key) -> value
返回 hash 指定键对应的值。
样例
var h = new Hash({ a: 'apple', b: 'banana', c: 'coconut' });
h.get('a');
// -> 'apple'
h.get('d');
// -> undefined
clone [1.6]
clone() -> newHash
返回一个 hash 的克隆。
样例
var h = new Hash({ a: 'apple'});
var clone = h.clone();
h.unset('a');
h.inspect();
// -> #<Hash:{}>
clone.inspect();
// -> #<Hash:{'a': 'apple'}>
Hash 可以看作是一个 关联数组,它对每一个值都绑定了一个唯一的键(值并不必须是唯一的), 然而,它不能保证迭代时元素的顺序始终一致。因为 JavaScript 程序语言的特性,每个对象实际上都是一个 hash,但是,本篇所述的 Hash 增加了许多方法,让你能够轻松地枚举键和值、迭代“键/值”对、 合并两个 hash、将 hash 编码成为一个查询字符串等等。
创建一个 hash
构造一个 Hash 实例有两种方法:第一种是使用 new 关键字实例化一个 JavaScript 对象(new Hash(obj))。第二种是使用 $H 函数。传递一个 JavaScript 对象或是一个 Hash 给 $H,$H 函数会克隆它们,并不会对原始对象造成任何影响。
对于上述两种构造方...
<script src="prototype.js"></script>
<script>
// 创建一个对象
var obj = {
key1: 1,
key2: 2,
key3: 3
};
// 将其转换为Hash对象
var hash = $H(obj);
// 输出 #<Hash: {'key1': 1, 'key2' : 2, 'key3': 3}>
// 输出key1=1&key2=2&key3=3
alert("hash.inspect()"+hash.inspect()+"rntoQueryString: "+hash.toQueryString()+"rn"+"values: "+hash.values()+"rn keys: "+hash.keys());
</script>...