汪立ID:lee576
177618次访问,排名403好友67人,关注者64
不要想给自己找个“老师”,自己就是自己的老师,勤奋与思考,才配做程序员!
lee576的文章
原创 526 篇
翻译 4 篇
转载 325 篇
评论 37 篇
lee576的公告
渴望知识的力量,知识创造财富和价值并赢得时间
最近评论
billschen:学习了.多谢啦...
oyangxiaoxiao:这个方法不行的,我试过了。
VincenT08:实验成功!Thanks!!!
huangjacky:不错,收藏
soulmelody:我也是刚接触的
前天用CSS外部样式表控制样式
结果我就从HTML前台代码下手,看了源代码才知道
不过没想到访问是这样的!!不错!!
文章分类
收藏
    相册
    跳伞
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起收藏

    新一篇: EXT2.0 下拉树例子 | 旧一篇: 悟透JavaScript

    一般的,如果我们定义一个类,会定义一个function对象,然后将公用方法写到其原型上,例如:   var Tiger = function(){}   Tiger.prototype.Hunting = function(){}      但是要建立一个完善的框架或者类库,没有继承帮忙,组织代码将是一件非常辛苦且难以管理的工作。Js中的类是function对象,实现继 承,主要要将子类的原型设置为父类的一个实例(这样子类就用有了父类原型的所有成员),并重新将子类原型的构造器设置为子类自己。如以下代码所示:   function Animal(){}   function Tiger(){}   Tiger.prototype = new Animal()   Tiger.prototype.constructor = Tiger      实现继承并不难,将上面的Animal和Tiger参数化封装为一个方法就可以实现(当然实际应用中就要复制一些了),代码如下:   function Extend(subFn, superFn){    subFn.prototype = new superFn()    subFn.prototype.constructor = subFn   }   Ext作为一个优秀的框架,当然也少不了继承的实现。如前一篇文章所谈到的,现在让我们一行行代码理解Ext.extend    extend : function(){    // inline overrides    var io = function(o){    for(var m in o){    this[m] = o[m];    }    };    return function(sb, sp, overrides){    if(typeof sp == 'object'){    overrides = sp;    sp = sb;    sb = function(){sp.apply(this, arguments);};    }    var F = function(){}, sbp, spp = sp.prototype;    F.prototype = spp;    sbp = sb.prototype = new F();    sbp.constructor=sb;    sb.superclass=spp;    if(spp.constructor == Object.prototype.constructor){    spp.constructor=sp;    }    sb.override = function(o){    Ext.override(sb, o);    };    sbp.override = io;    Ext.override(sb, overrides);    return sb;    };    }()      本来只有两行代码就可以实现的继承变成了近30行,Ext都做了什么呢?通常情况下只传入两个类型的话(subFn和superFn),上面的代码将简化为    extend : function(){    // inline overrides    var io = function(o){    for(var m in o){    this[m] = o[m];    }    };    return function(sb, sp, overrides){    var F = function(){}, sbp, spp = sp.prototype;    F.prototype = spp;    sbp = sb.prototype = new F();    sbp.constructor=sb;    sb.superclass=spp;    sb.override = function(o){    Ext.override(sb, o);    };    sbp.override = io;    Ext.override(sb, overrides);    return sb;    };    }()      定义一个空函数,将其原型设置为sp的原型spp,其实F就是sp的一个替身,理解的时候可以认为就是sp。将子类sb的原型设置为F的一个 实例,然后再将其原型的构造器设置为自己sb,为了方便找到父类sp,在子类sb上添加了一个superclass属性为父类sp的原型spp。为了方便 扩展属性,在子类sb上添加了属性重写的override方法,也在其原型上添加了override方法(这样其所有实例对象就可以从一个对象重写现有属 性了)。   
      到这里算是对继承有了一些了解(不到位的地方在以后的阅读中继续加强)。好了,有了继承的支持,我们就可以加速类型的扩展了。 

    发表于 @ 2008年07月03日 17:29:09|评论(loading...)|编辑|收藏

    新一篇: EXT2.0 下拉树例子 | 旧一篇: 悟透JavaScript

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © lee576