// JavaScript Document
(function(){
var TemplateClass = function(){}, ExtObject = Ext.Object = {
chain:Object.create || function(object)
{
TemplateClass.prototype = object;
var result = new TemplateClass();
TemplateClass.prototype = null; return result;
},//Ext.log.info(ExtObject.chain({1:3}));
toQueryObjects:function(name,value,recursive)
{
var self = ExtObject.toQueryObject,objects = [],i,ln;
if(Ext.isArray(value))
{
for(i =0,ln = value.length;i<ln;i++)
{
if(recursive)
{
objects = objects.concat(self(name+'['+i +']', value[i],true));
}
else
{
objects.push({
name:name,
value:value[i]
});
}
}
}
else if(Ext.isObject(value))
{
for(i in value)
{
if(value.hasOwnProperty(i))
{
if(recursive)
{
objects = objects.concat(self(name+'['+i+']',values[i],true));
}
else
{
objects.push({
name:name,
value:value[i]
});
}
}
}
}
else
{
objects.push({
name:name,
value:value
});
} return objects;
},
toQueryString:function(object,recursive)
{
var paramObjects = [],params = [],i,j,ln,paramObject,value; for(i in object)
{
if(object.hasOwnProperty(i))
{
paramObjects = paramObjects.concat(ExtObject.toQueryObjects(i,object[i],recursive));
}
} for(j=0,ln=paramObjects.length;i<ln;j++)
{
paramObject = paramObjects[j];
value = paramObject.value; if(Ext.isEmpty(value))
{
value ='';
}
else if(Ext.isDate(value))
{
value = Ext.Date.toString(value);
} params.push(encodeURIComponent(paramObject.name) + '=' + encodeURIComponent(String(value)));
} return params.join('&');
},
fromQueryString:function(queryString,recursive)
{
var parts = queryString.replace(/^\?/,'').split('&'),
object = {},
temp ,components,name,value,i,ln,part,j,subLn,matchedKeys,matchedName,
keys,key,nextKey; for(i=0,ln = parts.length;i<ln;i++)
{
part = parts[i]; if(part.length>0)
{
components = part.split('=');
name = decodeURIComponent(components[0]);
value = (components[1] !==undefined ) ? decodeURIComponent(components[1]):'';
if(!recursive)
{
if(object.hasOwnProperty(name))
{
if(!Ext.isArray(object[name]))
{
object[name] = [object[name]];
} object[name].push(value);
}
else
{
object[name] = value;
}
}
else
{
matchedKeys = name.match(/(\[):?([^\]]*)\]/g);
matchedName = name.match(/^([^\[]+)/); if (!matchedName) {
throw new Error('[Ext.Object.fromQueryString] Malformed query string given, failed parsing name from "' + part + '"');
} name = mathedName[0];
keys = []; if(matchedKeys === null)
{
object[name] = value;
continue;
} for (j = 0, subLn = matchedKeys.length; j < subLn; j++) {
key = matchedKeys[j];
key = (key.length === 2) ? '' : key.substring(1, key.length - 1);
keys.push(key);
} keys.unshift(name); temp = object; for (j = 0, subLn = keys.length; j < subLn; j++)
{
key = keys[j]; if (j === subLn - 1) {
if (Ext.isArray(temp) && key === '') {
temp.push(value);
}
else {
temp[key] = value;
}
}
else {
if (temp[key] === undefined || typeof temp[key] === 'string') {
nextKey = keys[j+1]; temp[key] = (Ext.isNumeric(nextKey) || nextKey === '') ? [] : {};
} temp = temp[key];
}
}
}
} }
return object;
},
each:function(object,fn,scope)
{
for(var property in object)
{
if(object.hasOwnProperty(property))
{
if(fn.call(scope || object ,property,object[property],object)===false)
{
return;
}
}
}
},
merge:function(destination)
{
var i =1,ln = arguments.length,
mergeFn = ExtObject.merge,
cloneFn = Ext.clone,
object,key,value,sourceKey;
for(;i<ln;i++)
{
object = arguments[i]; for(key in object)
{
value = object[key]; if(value && value.constructor === Object)
{
sourceKey = destination[key];
if(sourceKey && sourceKey.constructor===Object){
mergeFn(sourceKey,value);
}
else
{
destination[key] = cloneFn(value);
}
}
else
{
destination[key]=value;
}
}
}
} ,
mergeIf: function(destination) {
var i = 1,
ln = arguments.length,
cloneFn = Ext.clone,
object, key, value; for (; i < ln; i++) {
object = arguments[i]; for (key in object) {
if (!(key in destination)) {
value = object[key]; if (value && value.constructor === Object) {
destination[key] = cloneFn(value);
}
else {
destination[key] = value;
}
}
}
} return destination;
},
getKey:function(object,value)
{
for(var property in object)
{
if(object.hasOwnProperty(property) && object[property] === value)
{
return property;
}
} return null;
},
getValues:function(object){
var values = [],property;
for(property in object)
{
if(object.hasOwnProperty(property))
{
values.push(object[property]);
}
} return values;
},
//获取objects key
getKeys:(typeof Object.keys == 'function') ? function(object){
if(!object){
return [];
}
return Object.keys(object);
} :function(object){
var keys = [],property; for(property in object)
{
if(object.hasOwnProperty(property))
{
keys.push(property);
}
}
return keys;
},
//获取objects property count
getSize:function(object){
var size = 0,property; for(property in object)
{
if(object.hasOwnProperty(property))
{
size++;
}
}
return size;
},
//判断对象是否有属性
isEmpty:function(object)
{
for(var key in object)
{
if(object.hasOwnProperty(key))
{
return false;
}
} return true;
},
//判断对象是否相等
equals: (function() {
var check = function(o1, o2) {
var key; for (key in o1) {
if (o1.hasOwnProperty(key)) {
if (o1[key] !== o2[key]) {
return false;
}
}
}
return true;
}; return function(object1, object2) { // Short circuit if the same object is passed twice
if (object1 === object2) {
return true;
} if (object1 && object2) {
// Do the second check because we could have extra keys in
// object2 that don't exist in object1.
return check(object1, object2) && check(object2, object1);
} else if (!object1 && !object2) {
return object1 === object2;
} else {
return false;
}
};
})(),
classify:function(object)
{
var prototype = object,objectProperties = [],
propertyClassMap = {},
objectClass = function(){
var i = 0,ln = objectProperties.length,property; for(;i<ln;i++)
{
property = objectPropertyes[i];
this[property] = new propertyClassesMap[property]();
}
},key,value; for(key in object)
{
if(object.hasOwnProperty(key))
{
value = object[key]; if(value && value.constructor === Object)
{
objectProperties.push(key);
propertyClassMap[key] = ExtObject.classify(value);
}
}
} objectClass.property = property; return objectClass;
} }; Ext.merge = Ext.Object.merge; Ext.mergeIf = Ext.Object.mergeIf; /**
*
* @member Ext
* @method urlEncode
* @inheritdoc Ext.Object#toQueryString
* @deprecated 4.0.0 Use {@link Ext.Object#toQueryString} instead
*/
Ext.urlEncode = function() {
var args = Ext.Array.from(arguments),
prefix = ''; // Support for the old `pre` argument
if ((typeof args[1] === 'string')) {
prefix = args[1] + '&';
args[1] = false;
} return prefix + ExtObject.toQueryString.apply(ExtObject, args);
}; /**
* Alias for {@link Ext.Object#fromQueryString}.
*
* @member Ext
* @method urlDecode
* @inheritdoc Ext.Object#fromQueryString
* @deprecated 4.0.0 Use {@link Ext.Object#fromQueryString} instead
*/
Ext.urlDecode = function() {
return ExtObject.fromQueryString.apply(ExtObject, arguments);
}; }());

Ext原码学习之lang-Object.js的更多相关文章

  1. Ext原码学习之Ext.js

    1 // JavaScript Document 2 //定义全局Ext变量 3 var Ext = Ext ||{}; 4 Ext._startTime = new Date().getTime() ...

  2. Ext原码学习之Ext-more.js

    // JavaScript Document Ext.apply(Ext,{ userAgent:navigator.userAgent.toLowerCase(), cache:{}, isSeed ...

  3. Ext原码学习之lang-Array.js

    // JavaScript Document //Array 方法 (function(){ var arrayPrototype = Array.prototype, slice = arrayPr ...

  4. JDK1.8源码(一)——java.lang.Object类

    本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址. 首先介绍JDK中所有类的基类——java.lang.Object. Object 类属于 java.lang 包,此包下 ...

  5. Java源码学习 -- java.lang.StringBuilder,java.lang.StringBuffer,java.lang.AbstractStringBuilder

    一直以来,都是看到网上说“ StringBuilder是线程不安全的,但运行效率高:StringBuffer 是线程安全的,但运行效率低”,然后默默记住:一个是线程安全.一个线程不安全,但对内在原因并 ...

  6. Java源码学习 -- java.lang.String

    java.lang.String是使用频率非常高的类.要想更好的使用java.lang.String类,了解其源代码实现是非常有必要的.由java.lang.String,自然联想到java.lang ...

  7. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  8. 【 js 基础 】【 源码学习 】源码设计 (持续更新)

    学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:undersc ...

  9. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

随机推荐

  1. 【Linux】Linux没有网络,可能的解决方法

    [root@localhost etc]# cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]# ll 修改此文件中 ...

  2. CSS实战 模拟 新闻列表

    总结:所使用的知识点:1.padding应用以及box-sizing: border-box自动内减撑大的盒子 2.ul>li 的使用,去除黑圆圈 3.a标签的使用,去除默认样式<下划线& ...

  3. 初识python 之 爬虫:正则表达式

    python中正则表达式功能由 re 模块提供: import re 两个主要函数: match  匹配第一个字符(从第一个字符开始匹配) search 匹配整个字符串 一.匹配单个字符 1.匹配某个 ...

  4. 初识python 之 爬虫:爬取某网站的壁纸图片

    用到的主要知识点:requests.get 获取网页HTMLetree.HTML 使用lxml解析器解析网页xpath 使用xpath获取网页标签信息.图片地址request.urlretrieve ...

  5. C语言考题:输入一个字符串,将此字符串中特定的字符删去后, 显示新的字符串,要求用函数来完成删去字符的操作。

    #include <stdio.h> #include <string.h> /*此题只需要删除单个字符,比较简单.相信大家也能做出来的.我这个也是可以实现的.只是加了两个判断 ...

  6. Maven+ajax+SSM实现查询

    2.尚硅谷_SSM高级整合_使用ajax操作实现页面的查询功能 16.尚硅谷_SSM高级整合_查询_返回分页的json数据.avi 在上一章节的操作中我们是将PageInfo对象存储在request域 ...

  7. PAT 乙级 1004. 成绩排名 (20)(C语言描述)

    读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生 ...

  8. xxe-lab学习

    0x00 前言 xxe-lab是一个一个包含php,java,python,C#等各种语言版本的XXE漏洞Demo这里附上下载链接https://github.com/c0ny1/xxe-lab我们用 ...

  9. 《Flink SQL任务自动生成与提交》后续:修改flink源码实现kafka connector BatchMode

    目录 问题 思路 kafka参数问题 支持batchmode的问题 参数提交至kafkasource的问题 group by支持问题 实现 编译 测试 因为在一篇博文上看到介绍"汽车之家介绍 ...

  10. 触发器中获取sql

    CREATE trigger 触发器名 on 表名 for update,delete as set nocount on create table #t(EvebtType varchar(60), ...