javascript中类的继承机制如下,有一个baseClass的类,然后为其定义两个方法,someMethod()和overwriteMethod()
1 |
var BaseClass = function (){ |
4 |
BaseClass.prototype.someMethod = function (){ |
7 |
BaseClass.prototype.overridenMethod = function (){ |
对于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 (){ |
04 |
SubClass.prototype = new BaseClass(); |
05 |
SubClass.prototype .newMethod = function (){ |
08 |
SubClass.prototype.overridenMethod = function (){ |
2使用EXTjs的extend()函数
1 |
var SubClass = function () { |
2 |
SubClass.superclass.constructor.call( this ); |
4 |
Ext.extend(SubClass, BaseClass, { |
5 |
newMethod : function () {}, |
6 |
overriddenMethod : function () {} |
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 ); |
Ext.extend()函数提供了直接访问父类构造函数的途径,通过 SubClass.superclass.constructor.call(this);就可以直接调用父类的构造函数,这个函数的第一个参数总是 this,以确保父类的构造函数在子类的作用域里工作。
如果父类的构造函数需要传入参数,可以讲所需的参数直接传递给它: SubClass.superclass.constructor.call(this,config);这样就得到了一个继承了父类的所有属性和函数的子类。
下面是一个完整的类继承的例子
01 |
SuperClass= function (){ |
03 |
SuperClass.prototype.AA= function (){ |
08 |
SubClass.superclass.constructor.call( this ); |
10 |
Ext.extend(SubClass,SuperClass,{ |
11 |
BB: function (){alert( '新方法' );}, |
12 |
AA: function (){alert( '重写方法' );} |
13 |
} //配置信息主要用来重写父类的方法和添加新方法 |
16 |
var sub= new SubClass(); |
结果是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' }); |
08 |
this .databasePanel , this .tabPanel , this .sqlConsole |
10 |
getDatabasePanel: function () { |
11 |
return this .databasePanel; |
14 |
IDB.WebsqlConsole.superclass.initComponent.call( this ); |
1 |
IDB.ConsoleManager = function () { |
2 |
IDB.ConsoleManager.superclass.constructor.call( this , { |
3 |
items:[ new Ext.Panel({title: '标题1' })] |
6 |
Ext.extend(IDB.ConsoleManager, IDB.MyTabPanel) |
总结一下,对于EXTjs来说,有一个base类,子类使用extend来继承base类,extend有三个参数,第一个是子类即this,第二个参数是base类,第三个参数是config。另外子类在构造的时候使用subclase.superclass.construtor.call(this);来构造。
- 你真的会用ABAP, Java和JavaScript里的constructor么?
如果constructor里调用了一个成员方法,这个方法被子类override了,当初始化一个子类实例时,父类的构造函数被的调用,此时父类构造函数的上下文里调用的成员方法,是父类的实现还是子类的实现? ...
- 深入浅析JavaScript中的constructor
constructor 属性返回对创建此对象的数组函数的引用.本文给大家介绍JavaScript中的constructor ,需要的朋友参考下吧 定义和用法 constructor 属性返回对创建此对 ...
- JavaScript——this、constructor、prototype
this this表示当前对象,如果在全局作用范围内使用this,则指代当前页面对象window: 如果在函数中使用this,则this指代什么是根据运行时此函数在什么对象上被调用. 我们还可以使用a ...
- javascript typeof 和 constructor比较
转自:http://www.cnblogs.com/hacker84/archive/2009/04/22/1441500.html http://www.cnblogs.com/siceblue/a ...
- 【转】JavaScript中的constructor与prototype
最初对js中 object.constructor 的认识: 在学习JS的面向对象过程中,一直对constructor与prototype感到很迷惑,看了一些博客与书籍,觉得自己弄明白了,现在记录如下 ...
- JavaScript对象属性 constructor
对象属性 constructor 属性返回对创建此对象的数组函数的引用; constructor(构造函数) 在对象创建或实例化时候被调用的方法.通常使用该方法来初始化数据成员和所需资源.构造函数不 ...
- Javascript Prototype __proto__ constructor 三者的关系
JavaScript三大毒瘤 --- this,原型链,作用域 在我等菜鸟一步一步升级中的过程中,这三个概念总是困扰这我们(可能只有我吧,我比较蠢).这三个东西往往都很绕,今天我就来分享一下我对原型. ...
- JavaScript中的constructor和继承
概述 这是我在看JavaScript面向对象编程指南的时候,对constructor和继承的总结. 关于它们的详细知识,可以上网查到,所以我只写那些网上没有的. 内容 constructor的理解 c ...
- javascript原型继承---constructor篇
很多人对constructor的理解是指向对象的构造函数,今天才发现这种理解是有偏差的... 其实, constructor指向的不是实例化实例的构造函数,而是实例化该对象的构造函数的原型的构造函数 ...
随机推荐
- nginx_upstream_check_module监控后端服务器http
nginx_upstream_check_module 是专门提供负载均衡器内节点的健康检查的外部模块,由淘宝的姚伟斌大神开发,通过它可以用来检测后端 realserver 的健康状态.如果后端 re ...
- NEERC Southern Subregional 2011
NEERC Southern Subregional 2011 A - Bonnie and Clyde solution 双指针搞搞就好. 时间复杂度:\(O(n)\) B - Building F ...
- WCF客户端调用服务器端错误:"服务器已拒绝客户端凭据"。
WCF客户端和服务器端不在同一台机器上时,客户端调用服务器端会报如下错误:"服务器已拒绝客户端凭据". 解决办法:在服务端配置文件与客户端配置文件中加入下面红色部分
- 【前端vue开发】vue开发总结
- ECS Navicat for MySQL远程连接报10038的错误
解决问题时,建议先在阿里云设置好数据库访问的白名单,把自己的IP地址填进去 问题现象 Navicat for MySQL访问远程mysql数据库,出现报错,显示“2003- Can't connect ...
- weex官方demo weex-hackernews代码解读(上)
一.介绍 weex 是阿里出品的一个类似RN的框架,可以使用前端技术来开发移动应用,实现一份代码支持H5,IOS和Android.最新版本的weex已默认将vue.js作为前端框架,而weex-hac ...
- 工作流调度器azkaban2.5.0的安装和使用
为什么需要工作流调度系统 一个完整的数据分析系统通常都是由大量任务单元组成: shell脚本程序,java程序,mapreduce程序.hive脚本等 各任务单元之间存在时间先后及前后依赖关系 为了很 ...
- 自主搭建CNN训练时遇到的问题
1.训练太慢 用nimibatch代替fullbatch https://www.cnblogs.com/guoyaohua/p/8724433.html 2.过拟合 最直接的解决过拟合问题的办法是增 ...
- 004.MySQL主库手动复制至从库
一 主库手动复制至从库 1.1 Master主库锁表 mysql> flush tables with read lock; Query OK, 0 rows affected (0.00 se ...
- vue打包以及在Apache环境下的配置
vue打包,我们都清楚,实在记不住命令的可以去package.json中看: npm run build 打包后会生成dist文件夹,将dist文件夹下的所有文件复制到Apache下的www的文件夹下 ...