// 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. Eclipse导入Elasticsearch源码

    Eclipse导入Elasticsearch源码的步骤, 基于Elasticsearch 6.2.2的源码版本. 1.安装JDK1.9 Elasticsearch 6.2.2需要JDK1.9编译,否则 ...

  2. .net core集成使用EasyNetQ来使用rabbitmq

    之前有写到一篇介绍EasyNetQ的博文(C# .net 使用rabbitmq消息队列--EasyNetQ插件介绍),所以本文从.net core的角度去继承使用EasyNetQ,而用法类似于之前集成 ...

  3. Unity——ShaderLab实现玻璃和镜子效果

    在这一篇中会实现会介绍折射和反射,以及菲尼尔反射:并且实现镜子和玻璃效果: 这里和之前不同的地方在于取样的是一张CubeMap: demo里的cubemap使用的一样,相机所在位置拍出来的周围环境图: ...

  4. 使用.NET 6开发TodoList应用(19)——处理OPTION和HEAD请求

    系列导航及源代码 使用.NET 6开发TodoList应用文章索引 需求 在HTTP请求中,我们还剩下两类不常使用的请求没有讲到,本文就来实现以下关于OPTIONS和HEAD请求.OPTIONS请求用 ...

  5. linux下备份mysql数据

    一.业务场景 自己现在做的项目基本上已经开发完成,正式开始上线运行,主要包含两个子项目一个是小程序的后台,一个是后台管理系统. 正式开始运行一段时间后,基本上也没什么BUG了,整个项目都已经能够正常的 ...

  6. Inside Java Newscast #1 深度解读

    本文是 Inside Java Newscast #1 的个人体验与解读.视频地址:点击这里 ⎯⎯⎯⎯⎯⎯ Chapters ⎯⎯⎯⎯⎯⎯ 0:00 - Intro 0:57 - Java 16 – ...

  7. solr -window 安装与启动

    1.下载 官网路径   https://solr.apache.org/downloads.html 为了稳定,我用 5.4.1 版本的 ,   这是下载地址 https://archive.apac ...

  8. LINUX学习-Mysql集群-主从服务器备份

    一.Mysql主从集群备份. 1.准备两台主机 主服务器:192.168.88.20和从服务器:192.168.88.30 2.分别安装mysql yum -y -install mysql mysq ...

  9. LINUX学习-Nginx服务器的反向代理和负载均衡

    一.准备环境 1.准备3台服务器: 1)192.168.88.10 --Nginx服务器 2)192.168.88.20 --apache服务器 3)192.168.88.30 --apache服务器 ...

  10. 华为HMS Core全新推出会员转化&留存预测模型

    现在,付费学知识,付费听歌,付费看电视剧,付费享受线上购物优惠--等等场景已经成为大部分年轻人的日常. 而对于企业商家来说,付费会员作为企业差异化用户运营的手段,不仅有利于提升用户的品牌忠诚度,在当下 ...