>  기사  >  웹 프론트엔드  >  프로토타입 해시 객체 학습_prototype

프로토타입 해시 객체 학습_prototype

WBOY
WBOY원래의
2016-05-16 18:49:431208검색
코드 복사 코드는 다음과 같습니다.

//해시 객체의 유틸리티 함수
함수 $ 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 데모'
// 빈 해시는 빈 쿼리 문자열입니다:
$H().toQueryString() // -> 🎜>update():

코드 복사


코드는 다음과 같습니다.


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 객체가 변경되지 않습니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.