阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
来源:互联网 发布:大智慧外汇软件 编辑:程序博客网 时间:2024/05/17 08:25
一般的,如果我们定义一个类,会定义一个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方法(这样其所有实例对象就可以从一个对象重写现有属 性了)。
到这里算是对继承有了一些了解(不到位的地方在以后的阅读中继续加强)。好了,有了继承的支持,我们就可以加速类型的扩展了。
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- 阅读Ext学习Javascript(二) Core/Ext.extend从继承说起
- Ext.extend 从继承说起
- 阅读Ext 学习Javascript(一)Core/Ext.js
- 阅读Ext 学习Javascript(一)Core/Ext.js
- 阅读Ext 学习Javascript(一)Core/Ext.jsjavascript
- ExtJS学习------Ext.define的继承extend,用javascript实现类似Ext的继承
- Javascript的继承和Ext的Extend
- JavaScript和ExtJS的继承 Ext.extend Ext.applyIf
- Ext的extend继承
- 转载 Ext.extend用法(ext的继承)
- Ext的extend继承1
- Ext的extend继承1
- Ext.Observable,Ext.extend,javaScript原型
- 10.1 从Ext.BLANK_IMAGE_URL说起
- 【Ext学习系列】Ext简介(二)
- 幻影软件流动态管理系统
- Windows Shell 编程 第七章
- 编写高性能 Web 应用程序的 10 个技巧 转自微软资料
- org.hibernate.exception.SQLGrammarException:Could not execute JDBC batch update问题的解决
- 浪潮之巅:硅谷的另一面
- 阅读Ext 学习Javascript(二)Core/Ext.extend 从继承说起
- 动态生成物理表
- 在线翻译与源语言不匹配现象剖析
- VBA中Option的四种用法
- 迅雷诉超级兔子侵权案9日开庭
- sql操作个别语句
- 如何将静态库文件Make到指定目录
- 微软在华十年:向中国倾斜
- 用jsp实现文件下载