手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >Prototype Hash对象 学习
Prototype Hash对象 学习
摘要:复制代码代码如下://Hash对象的工具函数function$H(object){returnnewHash(object);};varHa...

复制代码 代码如下:

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

【Prototype Hash对象 学习】相关文章:

JavaScript中string对象

prototype 的说明 js类

JavaScript中关联原型链属性特性

JavaScript的document和window对象详解

Js的Array数组对象详解

jQuery的基本概念与高级编程

JavaScript模版引擎的基本实现方法浅析

三种AngularJS中获取数据源的方式

Javascript中prototype属性实现给内置对象添加新的方法

Nodejs实现批量下载妹纸图

精品推荐
分类导航