`
adamed
  • 浏览: 183814 次
社区版块
存档分类
最新评论

答复: [原创]ExtJS 2.3源码分析(2012年02月21日更新)

 
阅读更多

 

临时详解下下面的代码:

    // 这个函数可以在你执行完原函数以后,执行一下自定义的函数。  
          createSequence : function( fcn , scope ) {  
              if ( typeof fcn != "function" ) {  
                  return this;  
              }  
              var method = this;  
              return function() {  
                  var retval = method.apply( this || window , arguments );  
                  fcn.apply( scope || this || window , arguments );  
                  return retval;  
              };  
          }  
 

 这个代码为什么要这么设计呢?

先看API中关于这个方法的使用方法:

    var sayHi = function(name){    alert('Hi, ' + name);}  
    sayHi('Fred'); // alerts "Hi, Fred"  
    var sayGoodbye = sayHi.createSequence(function(name){     
                                               alert('Bye, ' + name);  
                                       });  
    sayGoodbye('Fred'); // both alerts show

 

最终createSequence需要返回一个function类型的方法所以在方法的定义中return 了一个function。

且根据方法定义,该方法的第一个参数必须是一个function类型的对象,所以在方法的最开始首先判断该方法第一个参数的参数类型若不为 function则放弃后续操作并将createSequence方法的调用者返回去。这样类似于var sayGoodbye = sayHi.createSequence({});在执行sayGoodbye();时等价于调用sayHi();

 

这里还有一个待解决的问题那就是如何将sayHi保存起来,因为根据createSequence的定义。该方法需要先调用sayHi()而后调用里面的那个匿名function。

且因为一定要返回一个function所以下面必须renturn function(){。。。。。}这里请注意一点,返回的function中的this和return外面的this并不是同一个对象。

我们看代码:var mathod = this; 返回的function中: var retval = method.apply( this || window , arguments );

这2个this是不一样的,return外面的this表示调用createSequence的对象,根据上面的例子就是sayHi这个function。而return中的this代表调用return的function的那个对象,也就是调用sayHi的那个对象不是sayHi本身

所以必须在return function之前先把代表sayHi的function也就是那个this用一个内部变量缓存起来利用闭包供return的function执行时使用。

所以才有了var retval = method.apply( this || window , arguments );的写法。根据上面的DEMO我们重新给方法定义添加一些注释以帮助理解2个不同的this:

    // 这个函数可以在你执行完原函数以后,执行一下自定义的函数。  
          createSequence : function( fcn , scope ) {  
                    //这里的fcn就是DEMO中的那个<strong>function</strong>(name){alert(<em>'Bye, '</em> + name);}  
      
                      if ( typeof fcn != "function" ) {  
                  return this;  
              }  
              var method = this;//这个this为sayHi (类型为function)  
              return function() {  
                  var retval = method.apply( this || window , arguments );//这个this为调用sayHi的对象也就是window  
                             //上面那一句相当于调用sayHi(/* 这个地方应该是arguments 也就是 'Fred' */);  
                               fcn.apply( scope || this || window , arguments );
                          //上一句相当于执行function(name){alert('Bye, ' + name);}('Fred')  
                  return retval;//根据定义返回sayHi执行结果  
              };  
          }  

 

分享到:
评论

相关推荐

    ExtJS 2.3/3.0 定制你所需要的模块

    5. **源码分析**:博客作者提到的“源码”标签可能意味着文章会深入到ExtJS的源代码层面,讲解如何理解和修改内部工作原理,以适应特定的项目需求。这对于高级开发者来说是很有价值的,因为他们可以直接控制框架的...

    资料:包括extjs2.0源码

    6. **图表组件**:EXTJS 2.0内置了各种图表类型,如柱状图、饼图、线图等,适用于数据可视化需求,源码分析有助于定制高级图表功能。 7. **Ajax交互**:EXTJS 2.0通过Ajax技术实现与服务器的异步通信,提供了强大的...

    ExtJS 2.3 all

    ExtJS是一个Ajax框架,是一个用javascript写的,用于在客户端创建丰富多彩的web应用程序界面。ExtJS可以用来开发RIA也即富客户端的AJAX应用.ExtJS主要用于创建前端用户界面,是一个与后台技术无关的前端ajax框架。...

    ExtJS3.0 源码分析与开发实例宝典

    ExtJS3.0 源码分析与开发实例宝典

    Extjs教程源码

    Extjs教程源码 介: ***************第一部分基础知识**************** 第一讲: EXTJS4.0概述和HelloWorld程序 第二讲: EXTJS4.0的新特性 第三讲: EXTJS4.0数据模型——Model 第四讲: EXTJS4.0的数据代理——Proxy ...

    ExtJS源码分析与开发实例宝典

    资源名称:Ext JS源码分析与开发实例宝典内容简介:本书全面系统地剖析了ExtJS 3.0的架构设计原理。通过对源码的“抽丝剥茧”,读者可以掌握Ext JS架构的精妙,从原理层面用活Ext JS。此外,本书还提出了大量的解决...

    ExtJS源码分析与开发实例宝典4.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    ExtJS源码分析与开发实例宝典2.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    ExtJS源码分析与开发实例宝典0.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    ExtJS源码分析与开发实例宝典1.pdf

    这个是《ExtJS源码分析与开发实例宝典》高清版本,是本人花钱买来的,所以分享给大家,希望大家喜欢,由于本人一次只能上传60M大的文件(试了好多次,每次都上传到99%就不动了,还以为csdn在后台审核内容呢,害我电脑...

    Extjs 4.0 源码说明文档入门手册 和示例

    源码分析: 在`ext-4.0.0`目录中,你将找到ExtJS 4.0的核心源代码。这些文件主要分为以下几个部分: 1. `src`目录:这是ExtJS的核心源码存放处,包含了所有组件、类和工具函数。每个主要的组件或功能都有自己的子...

    extJS myeclipse源码示例

    extJS myeclipse源码示例

    ExtJS 3.4 源码包

    - **数据绑定**:通过Store和Model,ExtJS实现了数据和视图的双向绑定,方便数据的实时更新。 2. **源码分析** - **JS类系统**:ExtJS使用面向对象的类系统,类与类之间可以通过继承实现代码重用和扩展。 - **...

    extjs2.2和2.3的官方包

    这个压缩包包含两个主要版本——ExtJS 2.2和2.3,这两个版本都是ExtJS发展史上的重要里程碑。 **ExtJS 2.2** ExtJS 2.2是该框架的一个早期版本,它提供了许多基础的UI组件,如表格、树形视图、表单、面板、菜单等。...

    ExtJs源码

    extjs 源码,有兴趣的可以学习下

    ext js2.3的例子

    2. **数据绑定**:EXT JS支持数据绑定,可以将数据模型与UI组件关联,实现数据的实时更新。 3. **布局管理**:提供了多种布局方式,如fit布局、border布局、form布局等,适应不同场景下的页面布局需求。 4. **远程...

    extjs 的 源码包

    一个extjs的源码包.其中包括extjs的例子和文档.

    ExtJS源码分析与开发实例宝典完整版

    ExtJS源码分析与开发实例宝典完整版 1、JS画图部分代码在IE8上看不到效果,因为IE8不支持VML。 2、扩展的组件为作者独立完成,仅供学习之用,一些组件并没有经过严格的测试。 如果需要用到项目之中,请自行测试。 ...

    extjs4源码分享

    extjs4源码分享

    EXTJS源码分析与开发实例宝典-开发的效果图.rar

    从压缩包子文件的文件名称"EXTJS源码分析与开发实例宝典-开发的效果图.pdf"来看,这可能是一个PDF文档,包含了EXTJS的源码分析和开发实例的详细教程,很可能还包含了各种示例应用的截图,以直观地展示EXTJS的组件和...

Global site tag (gtag.js) - Google Analytics