• 网站地图
  • TAG标签
  • RSS订阅
  • 加入收藏
  • 联系我们
  • 长虹虹信联系
    虹信软件
    当前位置: 主页 > 员工天地 >

    ExtJs开发细谈 (二) ---企业信息化

    内容介绍
      
    2.3作用域
    2.3.1调试工具
        在具体介绍作用域之前,先讲解一种简单的脚本测试方法。准备好firefox浏览器,并安装好firebug工具。打开firebug,然后进入控制台,在命令行中输入代码即可进行测试。命令行支持编码提示,还有历史记录,测试十分方便。如下图所示,(点击右下角的箭头可以放大命令行)。
     
    2.3.2全局作用域和局部作用域
        任何程序设计语言都有作用域的概念,作用域表示程序之中变量或者函数的可访问范围,也就是说作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。
        顾名思义,全局作用域表示此作用域中的变量和函数,在代码中任何地方都能访问到。Javascript中的全局作用域主要分为两种:
    a)最外层的变量或者函数具有全局作用域
    b)window对象的属性拥有全局作用域
        在Javascript中,window对象是一个很特殊的对象,每打开一个页面,就会有一个对应的window对象存在,直到页面关闭为止。window包含了其它所有的对象和所有的全局变量。
        局部作用域,最常见的例如函数内部,所以在一些地方也会看到有人把这种作用域称为函数作用域。
    如下例子所示,变量gVar、nIGVar和函数fn都拥有全局作用域,lVar拥有局部作用域,window对象中包含了所有这些变量和函数。
     
    2.3.3作用域链
        Javascript是一种动态弱类型的语言,在Javascript里一切都是对象,函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],由ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,它决定了哪些数据能被函数访问。通俗来讲,可以把作用域链看作一条路,在这条路上不同的地方有着不同的东西(各种对象),要想获取到某样东西,那么就必须沿着这条路走,直到找到这样东西为止。如下例所示,在输出gVar时,由于在函数fn的作用域中找不到,于是就沿着作用域链向上查找,一直找到全局变量gVar为止。 
     
        作用域链在实际应用开发中是十分重要的,熟练的掌握其实际用法能够为开发带来很大便利。因此,在这里不讨论作用域链的具体实现机制,只是通过实际的例子来具体讨论作用域链的实际用法。
    1.call函数的使用
      
        前两个结果大家可能都好理解,至于最后一个结果,明明调用的是obj1的函数,为什么输出结果却是obj2中testvar的值呢?实际上,当执行obj1的fun方法时,call方法强行将变量this指向到obj2这个对象,更严谨的表述应该是:obj1.fun的方法在对象obj2的作用域下运行。当运行一个对象的方法时,你可将作用域当作this值的变量。Call方法是JavaScript引擎的内在实现,每个方法都有call函数。
    2.this的使用
        在上一个例子中,出现了this.testvar的语句,其中的this是什么呢?你可以把this想象为每个函数内的一个特殊(不可见)参数。无论什么时候,JavaScript都会把this放到function内部。它是基于一种非常简单的思想:如果函数直接是某个对象的成员,那么this的值就是这个对象。如果函数不是某个对象的成员那么this的值便设为某种全局对象(常见有,浏览器中的window对象)。如图中例子所示:
     
    3.ExtJS作用域配置
        上面已经说到,对于没有分配作用域的函数(如上例中的innerFunc),它的this指向的是浏览器的window对象,那么当我们想在innerFunc中使用obj的相关数据时,应该怎么办呢?这时就需要用到作用域配置来强制改变this的指针。在ExtJs中,有很多类中 都有scope配置项,它能够对指针进行绑定。
    上面说到的call函数,其实就是一种改变this的方式。比如2中的例子,如果将obj.func()换成obj.fun.call(window),输出this的结果将全部是window对象。除此之外,还有apply函数,以及createDelegate函数。前者的作用与call完全一样,只是参数传递有区别,后者的作用是绑定this指针,保证函数运行在指定的作用域中。
        注重自主封装
        在ExtJs应用中,可重用性是一个应该深入研究的问题。ExtJs是高度组件化的,它本身已经有很强的可重用性,但是在实际开发中我们发现,有很多组件都可以再次封装,封装之后能够减少较多代码量。不仅如此,ExtJs还支持自定义组件,我们可以将一些特殊功能封装起来,然后当作组件使用。封装组件后能够极大的减少代码量,比如ExtJs自带的GridPanel组件,封装前实现一个简单的GridPanel可能需要100行代码,封装后只需要70行代码。要在IMS中,我觉得最遗憾的就是几乎没有封装自己的组件,其实在开发中有很多地方都很有封装的必要,但是由于时间精力和开发初期技术不够的因素,导致一直没能实现这个愿望。
    4. 编码风格、界面风格统一
    4.1编码风格统一
        在一个项目中,开发工作肯定是多人协作完成的,而不同的程序员的编码风格肯定不尽相同。这就造成同样的功能,却出现了好几种版本代码的问题,这种情况的发生可能会对项目的开发造成一些比较严重的问题。比如在IMS系统中,点击创建或者编辑一条记录时,我和另外一位程序员就出现了风格不一致的情况。因为这两个操作的代码很相似,所以我个人的做法是用一个函数来实现,然后通过id来判断是创建还是编辑(创建时传递id为空,编辑时传递记录的数据库id),这样做的好处是代码量少,重用性高,缺点是可读性降低,两个操作的参数个数需要一致,不一致时少的一方要补齐。而另外一位程序员则是将创建和编辑用两个函数来做,这样做的好处是逻辑清晰,可读性高,便于他人调试。也正是这个小小的风格不一致问题,导致项目后期封装数据表单以及功能优化时遇到很大阻碍。最终不得不花较大的时间和精力来重新统一这一块的代码风格。
    4.2界面风格
        界面风格不会对系统的实际功能造成影响,它属于人机交互的范畴,只有统一的界面风格才能给用户带来最好的体验。与编码风格的问题一样,不同程序员的喜好是不同的,因此会出现功能类似,页面效果却不一致的现象。比如在IMS系统开发初期,我们的编辑页面出现了两种不同的风格,一种风格是将保存和引入审批操作按钮放到了页面的最下方;另一种风格是将这两个操作按钮放到了最上方。
        编码风格和界面风格都是很重要的东西。统一的编码风格不仅能提高开发效率,还能为以后的调试和修改带来极大便利。统一的界面风格能够为用户带来良好的体验,在实际中我们应该保证同一个系统的风格一致,甚至可能的话不同系统间的风格也尽量一致,这样当多个系统集成在一起时,才能带来便利。
    5. 结语
        ExtJs是一个很强大的前端开发框架,它强大的UI在很大程度上解脱了对美工的依赖;面向对象的思想和丰富的组件也大大加速了开发效率;另外ExtJS属于面向RIA的框架,符合未来的发展趋势。当然ExtJs也有缺点,最让人诟病的就是其庞大的体积。无论如何,个人觉得ExtJs在开发企业管理系统上还是很有优势的。
        由于篇幅限制,还有很多比较常见的问题没有一一列举,欢迎大家一起交流学习。最后,由于本人从事开发时间不长,ExtJs使用也仅仅限于IMS系统,很多见解可能不够成熟,文中也可能存在一些问题,希望大家批评指正。
     
    作者:虹信公司----研发部 陈飞
    分享阅读:
  • 【制造数字化——长虹助力企业信息化/数字化转】
  •     制造数字化长虹助力企业信息化/数字化转型 iMES系统 iMES系统是长虹软服中心自主开发、拥有自主知识产权的一套面向制造企业的生产信息化管理系统,依托智能化采集、云计算、大数据分析等技术,支撑年产1亿只、峰值1000万/月、实时数据处理1s的海量产品生产任...[查看全文]


  • 【航天企业信息化之ERP“智”造“中国梦”】
  •     航天企业信息化之ERP智造中国梦[虹信ERP系统整理]: 航天信息股份有限公司是集技、工、贸于一体的拥有现代化企业管理机制的高新技术企业。由中国航天科工集团公司等十二家中国航天领域的著名企业的基础上于2000年发动成立。2003年在A股市场成功挂牌上市,是中国信息技...[查看全文]

    ------分隔线----------------------------
    Copyright 2012 www.jiadian888.com. 四川长虹电器股份有限公司
    四川省绵阳市高新区绵兴东路35号
    蜀ICP备12029174号-1