javascript中类的继承机制如下,有一个baseClass的类,然后为其定义两个方法,someMethod()和overwriteMethod()

1 var BaseClass = function(){
2 //do something
3 };
4 BaseClass.prototype.someMethod = function(){
5 //do something
6 };
7 BaseClass.prototype.overridenMethod = function(){
8 //do something
9 };

对于Extjs的类的继承,有几个函数需要注意一下

Ext.apply(obj, config, [defaults]) 将config对象的所有属性都复制到另一个对象obj上,第三个参数defaults可以用来提供默认值,不过通常指用前两个参数就够了。这个函数主要用在构造函数中,用来将配置复制到对象上。

Ext.applyIf(obj, config) 和Ext.apply的功能类似,唯一不同的是,这个函数只会将config对象中有,而obj对象中没有的属性复制到obj上。

Ext.extend(subclass, superclass, [overrides]) 用来继承已有的类

对于类的继承有几下几种方式:

1 javascript实现类的继承

01 var SubClass = function(){
02    BaseClass.call(this);
03 };
04 SubClass.prototype = new BaseClass();
05 SubClass.prototype .newMethod = function(){
06   //do something
07 };
08 SubClass.prototype.overridenMethod = function(){
09   //do something
10 };

2使用EXTjs的extend()函数

1 varSubClass = function() {
2     SubClass.superclass.constructor.call(this);
3 };
4 Ext.extend(SubClass, BaseClass, {
5     newMethod : function() {},
6     overriddenMethod : function() {}
7 };

3 extjs中替换constructor

01 // initComponent replaces the constructor: 
02 SubClass = Ext.extend(BaseClass, { 
03     initComponent : function(){ 
04         // call superclass initComponent 
05         Ext.Container.superclass.initComponent.call(this); 
06    
07         this.addEvents({ 
08             // add events 
09         }); 
10     
11 }

Ext.extend()函数提供了直接访问父类构造函数的途径,通过 SubClass.superclass.constructor.call(this);就可以直接调用父类的构造函数,这个函数的第一个参数总是 this,以确保父类的构造函数在子类的作用域里工作。

如果父类的构造函数需要传入参数,可以讲所需的参数直接传递给它: SubClass.superclass.constructor.call(this,config);这样就得到了一个继承了父类的所有属性和函数的子类。

下面是一个完整的类继承的例子

01 SuperClass=function(){
02 }
03 SuperClass.prototype.AA=function(){
04     alert('aa');
05 }
06         
07 SubClass=function(){
08      SubClass.superclass.constructor.call(this);          
09 }
10 Ext.extend(SubClass,SuperClass,{
11      BB:function(){alert('新方法');},
12      AA:function(){alert('重写方法');}
13 }//配置信息主要用来重写父类的方法和添加新方法
14 );
15         
16 var sub=new SubClass();
17  sub.AA();
18 sub.BB();

结果是alert出重写方法,和新方法。

这里补充一个稍微复杂的例子,以下是两种不同的继承方式

01 IDB.WebsqlConsole = Ext.extend(IDB.MyTabPanel, {
02   initComponent:function() {
03     this.databasePanel = new Ext.Panel({title:'标题1'});
04     this.tabPanel = new Ext.Panel({title:'标题2'})
05     this.sqlConsole = new Ext.Panel({title:'标题3'});
06     Ext.apply(this, {
07       items:[
08         this.databasePanel , this.tabPanel , this.sqlConsole
09       ],
10       getDatabasePanel:function() {
11         return this.databasePanel;
12       }
13     });
14     IDB.WebsqlConsole.superclass.initComponent.call(this);
15   }
16 });
1 IDB.ConsoleManager = function() {
2   IDB.ConsoleManager.superclass.constructor.call(this , {
3     items:[new Ext.Panel({title:'标题1'})]
4   });
5 };
6 Ext.extend(IDB.ConsoleManager, IDB.MyTabPanel)

总结一下,对于EXTjs来说,有一个base类,子类使用extend来继承base类,extend有三个参数,第一个是子类即this,第二个参数是base类,第三个参数是config。另外子类在构造的时候使用subclase.superclass.construtor.call(this);来构造。

javascript:base.superclass.constructor.call(this,config)的更多相关文章

  1. 你真的会用ABAP, Java和JavaScript里的constructor么?

    如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现? ...

  2. 深入浅析JavaScript中的constructor

    constructor 属性返回对创建此对象的数组函数的引用.本文给大家介绍JavaScript中的constructor ,需要的朋友参考下吧 定义和用法 constructor 属性返回对创建此对 ...

  3. JavaScript——this、constructor、prototype

    this this表示当前对象,如果在全局作用范围内使用this,则指代当前页面对象window: 如果在函数中使用this,则this指代什么是根据运行时此函数在什么对象上被调用. 我们还可以使用a ...

  4. javascript typeof 和 constructor比较

    转自:http://www.cnblogs.com/hacker84/archive/2009/04/22/1441500.html http://www.cnblogs.com/siceblue/a ...

  5. 【转】JavaScript中的constructor与prototype

    最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...

  6. JavaScript对象属性 constructor

     对象属性 constructor 属性返回对创建此对象的数组函数的引用; constructor(构造函数) 在对象创建或实例化时候被调用的方法.通常使用该方法来初始化数据成员和所需资源.构造函数不 ...

  7. Javascript Prototype __proto__ constructor 三者的关系

    JavaScript三大毒瘤 --- this,原型链,作用域 在我等菜鸟一步一步升级中的过程中,这三个概念总是困扰这我们(可能只有我吧,我比较蠢).这三个东西往往都很绕,今天我就来分享一下我对原型. ...

  8. JavaScript中的constructor和继承

    概述 这是我在看JavaScript面向对象编程指南的时候,对constructor和继承的总结. 关于它们的详细知识,可以上网查到,所以我只写那些网上没有的. 内容 constructor的理解 c ...

  9. javascript原型继承---constructor篇

    很多人对constructor的理解是指向对象的构造函数,今天才发现这种理解是有偏差的... 其实, constructor指向的不是实例化实例的构造函数,而是实例化该对象的构造函数的原型的构造函数 ...

随机推荐

  1. H2内嵌数据库使用步骤

    1.找到h2数据库的jar包 D:\repositories\com\h2database\h2\1.4.187\h2-1.4.187.jar 2.双击jar包,配置连接信息 Driver Class ...

  2. ubuntu 12.04网络配置之设置静态iP

    step: 1.输入命令: sudo vi /etc/network/interfaces 看到如下内容: 2.追加以下内容: iface eth0 inet static address 192.1 ...

  3. Coursera台大机器学习技法课程笔记10-Random forest

    随机森林就是要将这我们之前学的两个算法进行结合:bagging能减少variance(通过g们投票),而decision tree的variance很大,资料不同,生成的树也不同. 为了得到不同的g, ...

  4. win10编译caffe跑faster-rcnn(cuda7.5)

    2017年1月13日 15:46:04 github.com/Microsoft/caffe这版现在不算是BVLC/caffe的官方windows分支:官方windows分支是一个叫willyd的家伙 ...

  5. codewar 上做练习的一些感触

    废话 在[codewar][1]上做练习,每次都是尽量快速地做完,然后赶着去看排名里面clever分最高的solution,看完每次都要感叹一下人家怎么可以写得这么简洁,甚至有一次我用了一段大约七八行 ...

  6. Cname与A记录(Address)区别

    Cname与A记录(Address)区别A记录是解析域名到IP,Cname是解析域名到另外一个域名. 一台服务器可以布置多个网站,也可以有多个域名,如如域名A----->A记录-----> ...

  7. Delphi中使用ActiveX的一些心得

    使用方法分为两种:一.直接把可视化的ActiveX控件放到程序中:二.运行时根据需要实时建立.  如果是直接使用,则应用程序在初始化的过程中会自动寻找.创建所需的ActiveX控件,如果控件没有注册, ...

  8. SSL证书链说明

    SSL证书链说明 1. SSL证书链定义 证书颁发机构(CA)共分为两种类型:根CA和中间CA.为了使SSL证书被信任,该证书必须由设备所连接的可信存储库CA颁发. 如果该证书不是由受信任CA,该链接 ...

  9. CSS------如何让ul中的li分为两列甚至多列

    转载: http://blog.sina.com.cn/s/blog_7f13f92a0100rkfg.html 只需要复制ul和li中的style样式即可 如果需要自定义多少列,只需要修改li中的w ...

  10. SQL语句之 数据约束

    SQL语句之 数据约束 什么是数据约束 数据约束用来限制用户对数据的非法的修改操作. 1.约束字段的默认值 如果插入记录时,没有给某个字段赋值,那么我们可以设置它的默认值 关键字:default CR ...