//해시 객체의 유틸리티 함수
함수 $ H(object ) {
return new Hash(object)
};
var Hash = Class.create(Enumerable, (function() {
//초기화, 새로운 해시 객체 생성
function 초기화(object) {
this._object = Object.isHash(object) ? object.toObject() : Object.clone(object)
/ /Enumerable의 메서드를 재정의합니다.
function _each(iterator) {
for (var key in this._object) {
var value = this._object[key], 쌍은 순회할 때 사용됩니다. 해시 객체 = [키, 값];
pair.key = key;
pair.value = value;
iterator(pair)
}
함수 set( 키, 값) {
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];
반환 값;
}
function toObject() {
return Object.clone(this._object); 🎜> 함수 키() {
return this.pluck('key');
}
function value() {
return this.pluck('value'); >}
//값의 키 반환
function index(value) {
var match = this.Detect(function(pair) {
return pair.value === value ;
});
일치 && match.key
}
function merge(object) {
return this.clone().update(object); >}
//원래 Hash 객체를 업데이트하고, 객체 매개변수의 키-값 쌍을 원래 Hash 객체로 업데이트합니다.
function update(object) {
return new Hash(object). inject(this, function (result, pair) {
result.set(pair.key, pair.value);
결과 반환;
})
}
function toQueryPair(key, value ) {
if (Object.isUndefine(value)) return key
return key '=' encodeURIComponent(String.interpret(value))
function toQueryString() {
return this.inject([], function(results, pair) {
var key = encodeURIComponent(pair.key), value = pair.value;
if (values && typeof value = = 'object') {
if (Object.isArray(values))
return results.concat(values.map(toQueryPair.curry(key)));
} else results.push(toQueryPair( 키, 값));
결과 반환
}).join('&')
function inform() {
return '#return pair.map(Object.inspect).join(': ');
}).join( ', ') '}>';
}
function toJSON() {
return Object.toJSON(this.toObject())
}
function clone() {
return new Hash (this);
return {
initialize: 초기화,
_each: _each,
set: set,
get: get,
unset: unset,
toObject: toObject,
toTemplateReplacements: toObject,
keys: 키,
values: 값,
index: index,
병합: 병합,
업데이트: 업데이트,
toQueryString: toQueryString,
검사: 검사,
toJSON: toJSON,
clone: clone
}) ()));
Hash.from = $H;
복제
각
가져오기
키 검사
병합
Remove
set
toJSON
toObject
toQueryString
unset
update
value
메서드의 몇 가지 예를 들어보면 간단한 메서드는 건너뜁니다.
toQueryString( ):
코드 복사
코드는 다음과 같습니다.
$H({ action: 'ship', order_id: 123, fee: ['f1', 'f2'], 'label': 'a 데모' }).toQueryString()
// -> 'action=ship&order_id=123&fees =f1&fees=f2&label=a 데모' // 빈 해시는 빈 쿼리 문자열입니다:
코드 복사
코드는 다음과 같습니다.
var h = $H({ 이름: 'Prototype', 버전: 1.5 })
h.update({ 버전: 1.6, 작성자: 'Sam' }).inspect(); 🎜>// -> #
h.inspect(); 🎜>// -> #
//이 내용은 변경됩니다. 원본 해시 객체
코드 복사
코드는 다음과 같습니다.
var h = $H({ 이름: 'Prototype', 버전: 1.5 })
h.merge({ 버전: 1.6, 작성자: 'Sam' }).inspect(); 🎜>// -> #
h.inspect(); 🎜>// -> #
//여기에서는 원래 Hash 객체가 변경되지 않습니다