`
zhouyrt
  • 浏览: 1173927 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

读Ext之二(实用方法)

阅读更多

上篇看到Ext.extend,接着往下看。

 

Ext.namespace,用来管理Ext库命名空间的方法

namespace : function(){
    var o, d;
    Ext.each(arguments, function(v) {
        d = v.split(".");
        o = window[d[0]] = window[d[0]] || {};
        Ext.each(d.slice(1), function(v2){
            o = o[v2] = o[v2] || {};
        });
    });
    return o;
},

 

多数情况下会这么使用

 

Ext.ns("Ext.util", "Ext.lib", "Ext.data");

 

Ext.ns是Ext.namespace的简写,这时会为全局的Ext变量挂上util,lib,data属性,Ext.util,Ext.lib,Ext.data默认都是空的对象。当然也可以非Ext开头的命名空间。

 

Ext.namespace内部使用了Ext.each,顺藤摸瓜

each : function(array, fn, scope){
    if(Ext.isEmpty(array, true)){
        return;
    }
    if(!Ext.isIterable(array) || Ext.isPrimitive(array)){
        array = [array];
    }
    for(var i = 0, len = array.length; i < len; i++){
        if(fn.call(scope || array[i], array[i], i, array) === false){
            return i;
        };
    }
},

 

首先判断第一个参数array是否为数组,如果为空直接返回。接着判断array是否可迭代,对于数组、NodeList、HTMLCollection都是可迭代的,即返回true。不可迭代的,如基本类型的字符串,数字等会将其包装成数组。接着就是for循环,回调函数fn,fn的执行上下文scope,scope如果没有传默认为array[i],即在fn内使用this取到集合的每一个元素。fn的第一个参数为集合元素,第二个参数i为索引,第三个参数为被迭代元素自身。

 

最后还有个技巧,可以在fn内使用某个条件为false如 return i=3 来终止迭代,这时候会返回迭代最后一次的索引i。

可以看到 Ext.each 的用法与 JQuery.each 类似,不同之处在于Ext.each的第三个参数可以指定回调函数的执行上下文,JQuery.eac h 的第三个参数仅供库内部使用。

 

Ext.each中使用了Ext.isEmpty方法,

isEmpty : function(v, allowBlank){
    return v === null || v === undefined || ((Ext.isArray(v) && !v.length)) || (!allowBlank ? v === '' : false);
},

 

Ext.isEmpty中使用了Ext.isArray,

isArray : function(v){
    return toString.apply(v) === '[object Array]';
},

 

Ext.isEmpty中有句(Ext.isArray(v) && !v.length),这里使用逻辑非运算符而没有使用==,如(Ext.isArray(v) && v.length==0)。即当v是数组时还要检测数组是否为空,如length为4,则!v.length就为false了。即数组不为空。

 

在看Ext.toArray方法,也是一个匿名函数自执行,执行后返回的function才是真正的Ext.toArray

toArray : function(){
 return isIE ?
     function(a, i, j, res){
         res = [];
         for(var x = 0, len = a.length; x < len; x++) {
             res.push(a[x]);
         }
         return res.slice(i || 0, j || res.length);
     } :
     function(a, i, j){
         return Array.prototype.slice.call(a, i || 0, j || a.length);
     }
}(),
  

可以看到实现时对浏览器进行了判断,IE使用for循环的遍历 伪数组 ,将其push到res中。非IE浏览器则使用Array.prototype.slice。

IE中为何不能使用Array.prototype.slice呢,对于NodeList等并非一个JavaScript object。会抛异常。怿飞 总结过。

然而,随着IE9 beta的发布,IE9中已经将javascript引擎内置在浏览器中,见图

 

IE9 中Array.prototype.slice.call(NodeList) 已经不再抛异常了,可以使用其将NodeList等转换为数组。因此Ext.isIE这个条件改为 Ext.isIE6||Ext.isIE7||Ext.isIE8 则较为合理了。之前DOM的错误实现也部分修复了,相关 Blog

 

Ext.iterate方法,

iterate : function(obj, fn, scope){
    if(Ext.isEmpty(obj)){
        return;
    }
    if(Ext.isIterable(obj)){
        Ext.each(obj, fn, scope);
        return;
    }else if(Ext.isObject(obj)){
        for(var prop in obj){
            if(obj.hasOwnProperty(prop)){
                if(fn.call(scope || obj, prop, obj[prop], obj) === false){
                    return;
                };
            }
        }
    }
},

 

这是一个通用迭代器,可以迭代数组,也可以是对象。当为迭代数组/伪数组 时其实是调用上面提到的 Ext.each。参数及使用方式也与 Ext.each 类似。

 

Ext.urlEncode,该方法用来将js对象序列化成查询字符串

urlEncode : function(o, pre){
    var empty,
        buf = [],
        e = encodeURIComponent;

    Ext.iterate(o, function(key, item){
        empty = Ext.isEmpty(item);
        Ext.each(empty ? key : item, function(val){
            buf.push('&', e(key), '=', (!Ext.isEmpty(val) && (val != key || !empty)) ? (Ext.isDate(val) ? Ext.encode(val).replace(/"/g, '') : e(val)) : '');
        });
    });
    if(!pre){
        buf.shift();
        pre = '';
    }
    return pre + buf.join('');
},
  

里面使用了简写的 e = encodeURIComponent, encodeURIComponent 可以这么写,其是核心js对象,document.getElementById 等BOM对象则不能这么简写。

 

Ext.urlDecode 则是将查询字符串转换成js对象。

 

Ext.urlAppend 添加字符串到查询url。

 

 

  • 大小: 94.2 KB
  • Ext.rar (9.3 KB)
  • 下载次数: 19
5
1
分享到:
评论
3 楼 Sartner 2012-01-04  
我艹...大神...!!!
跟着大神学习 受益匪浅...
等我飞黄腾达了一定送您一套大别墅
2 楼 liangxianfu5811 2010-10-18  
最后还有个技巧,可以在fn内使用某个条件为false如 return i=3 来终止迭代,这时候会返回迭代最后一次的索引i。
这句解释的是否有错误,应该不是返回迭代最后一次的索引i,若是返回迭代最后一次的索引i,在each方法中就会存在闭包,请楼主回答下,谢谢

1 楼 lipeng88213 2010-09-27  
支持楼主 希望楼主继续

相关推荐

    Windows读取Ext4分区的工具 Ext2Read

    Linux最常用的文件系统类型之一就是EXT系列,包括EXT2、EXT3和EXT4。然而,Windows操作系统默认并不支持直接读取这些格式的分区。这时,就需要借助第三方工具来实现这一目标,例如“Windows读取Ext4分区的工具”——...

    在windows下使用Ext2Fsd访问EXT4分区

    但有一些第三方工具可以帮助我们解决这个问题,其中之一就是Ext2Fsd。Ext2Fsd是一个免费的开源软件,专门设计用于Windows系统上读/写Linux的EXT2、EXT3和EXT4文件系统。 **Ext2Fsd的主要功能:** 1. **读写支持**...

    读Ext之六(延迟任务的执行)

    在JavaScript的世界里,异步编程是核心之一,而延迟任务的执行则是异步处理中的重要概念。本篇文章将深入探讨“延迟任务的执行”,通过分析`DelayedTask.js`这个文件,我们可以了解到如何在Ext框架中实现延迟任务。...

    ext4-exactor.zip

    EXT4-extractor是一个专为Android设计的工具,它能够帮助开发者和故障排除人员解析EXT4格式的镜像文件,将其转换为一系列可读的文件以便分析。下面将详细介绍EXT4文件系统和EXT4-extractor工具的相关知识。 EXT4,...

    ext2.3 官方包 2.2中文手册

    EXT2.3是Linux操作系统中广泛使用的文件系统之一,它由Erich Boleyn和Hans Reiser在1992年开发,是EXT2(第二扩展文件系统)的改进版本,后续发展为EXT3(第三扩展文件系统)。EXT2.3官方包2.2中文手册提供了关于该...

    ext for Dreamweaver

    2. **语法高亮**:插件可以识别EXT特有的语法结构并进行高亮显示,使得代码更易读,更便于调试。 3. **错误检查**:实时检查代码,发现潜在的错误或不规范的编程习惯,帮助开发者尽早解决问题。 4. **代码片段**:...

    ExtReader(ext3文件系统读取器)

    综上所述,ExtReader是一个用C#编写的、基于.NET Framework 4.0的实用工具,专为在Windows 7及其以上版本的系统上读取Linux ext3文件系统而设计。它提供了对多磁盘和多分区的支持,但目前只限于读取操作,且不支持...

    EXT2 chm手册

    它是EXT文件系统的第二个主要版本,旨在改进其前身EXT1的性能和可靠性。EXT2 chm手册则为用户提供了一种离线查阅EXT2文件系统相关知识的便利方式,特别是对于那些需要深入理解EXT2特性和管理Linux文件系统的开发者和...

    EXT2.0中文教程

    EXT2.0中文教程是一个专为中文用户设计的EXT文件系统学习资源,旨在详细解析EXT文件系统的使用方法。EXT(Second Extended File System)是Linux操作系统中广泛使用的日志式文件系统,尤其在早期版本中非常常见。EXT...

    Ext3_2综合应用的例子

    **Ext3_2文件系统详解** Ext3_2是一种广泛使用的Linux文件系统,全称为“Extended File System version 3 second generation...尽管有更新的文件系统出现,但Ext3_2的稳定性和兼容性使其在许多场景下仍然具有实用性。

    EXT2.0 简明教程.rar

    EXT2.0 是Linux操作系统中的一种文件系统,它在1993年由Rene Rebeau开发,并作为EXT(第二扩展文件系统)的改进版发布。EXT2.0在当时是Linux社区广泛使用的标准文件系统之一,尤其在早期的Linux发行版中。它在EXT1的...

    ext2 项目完整的权限管理

    在压缩包中的"extpro"文件可能是EXT2文件系统的实用工具或扩展,可能包含用于分析、备份、恢复或优化EXT2文件系统的工具。这些工具可能包括`debugfs`(用于文件系统调试)、`mke2fs`(用于格式化磁盘为EXT2)、`e2...

    ext4分析工具C++代码

    ext4是Linux系统广泛使用的日志型文件系统之一,具有高容量、高效能的特点。本篇将深入探讨如何通过C++来分析ext4文件系统,以及涉及的相关知识点。 首先,`ext4.cpp`是一个C++源代码文件,很可能包含了实现读取和...

    Ext.JS.4.First.Look(第1版)

    - **实用性**: 本书提供了大量的实用案例和代码示例,帮助读者快速掌握Ext JS 4的核心功能。 - **易读性**: 内容组织清晰,配以图表和插图,便于理解和学习。 - **全面性**: 不仅覆盖了新功能,还涉及了如何从旧版本...

    json-ext:一组扩展JSON使用的实用程序。 专为快速且高效存储而设计

    一组扩展JSON使用的实用程序。 专为快速且高效存储而设计 特征: parseChunked() –解析块(例如FS可读流或获取响应流)附带的JSON stringifyStream() –字符串化流(Node.js) stringifyInfo() –在不将值转换...

    Ext JS框架 经验之作2000页

    ### Ext JS框架 经验之作2000页 #### 概述 本文档旨在提供一个全面且深入的指南,帮助读者理解并掌握Ext JS框架的各个方面。Ext JS是一款非常强大的JavaScript库,用于构建交互式的Web应用程序。它以其丰富的组件库...

    Worstveld_sling_ext

    扩展字体通常还支持多种语言,这对于国际化的项目来说非常实用。此外,由于它被归类为“字体”标签,我们可以推断它可能适用于各种设计软件,如Adobe Illustrator、Photoshop或InDesign,方便设计师进行编辑和创作。...

    js格式化好工具 ext辅助能手

    【标签】"js格式化好工具 ext辅助能手"进一步强调了这个工具的实用性和对于开发者在处理JavaScript代码时的辅助价值。标签中的“ext”可能指的是浏览器扩展,如Chrome或Firefox的扩展程序,这些扩展通常可以集成到...

    Python库 | structlog_ext_utils-0.1.0a5.tar.gz

    `structlog_ext_utils`库可能是为了提供一些额外的实用工具或者扩展,比如日志格式化、日志过滤、日志级别控制、异步日志处理等功能,以增强`structlog`的基本功能。 结构化日志的优点在于,它允许我们以程序可读的...

Global site tag (gtag.js) - Google Analytics