Ext3.1—继承
来源:互联网 发布:生辰八字宝宝起名软件 编辑:程序博客网 时间:2024/05/10 22:50
原谅我的吐槽
从公司待了这么久,一直为公司无私奉献着。用的差点上个是世纪的ExtJs3.1!一直有转站前端的想法。于是决定在原地起航,从ExtJs源码分析着手。通过自己对源码的阅读和分析,实际应用,和extjs源码分析开发宝典这本书一起。把心得和收获记录于此。
本次先把我之前对继承的研究贴出来。
经过对Ext.js的阅读 把继承相关的代码分离出来,并添加注释。
var Ext = {};Ext.isIE = (function() { var ua ='opera', //navigator.userAgent.toLowerCase(), check = function(r) { return r.test(ua); }, isOpera = check(/opera/); return !isOpera && check(/msie/);})();Ext.isObject = function(v) { return !!v && Object.prototype.toString.call(v) === '[object Object]'; //如果是函数 [object Function]};Ext.apply = function(o, c, defaults) { // no "this" reference for friendly out of scope calls if (defaults) { Ext.apply(o, defaults); } if (o && c && typeof c == 'object') { for (var p in c) { o[p] = c[p]; } } return o;};Ext.override = function(origclass, overrides) { if (overrides) { var p = origclass.prototype; Ext.apply(p, overrides); if (Ext.isIE && overrides.hasOwnProperty('toString')) { p.toString = overrides.toString; } }};Ext.extend = function() { // inline overrides var io = function(o) { for (var m in o) { this[m] = o[m]; } }; //书中扩展;~并没有好用的/* var superclass = function(sp){ var s = function(){return arguments.callee.superclass;}; s.superclass=sp; return s; }*/ var oc = Object.prototype.constructor; return function(sb, sp, overrides) { //sp如果是对象,实际只传入两个参数,Sb是自动生成的 //sp如果不是对象,就当是子类函数 if (Ext.isObject(sp)) { overrides = sp; sp = sb; sb = overrides.constructor != oc ? overrides.constructor : 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 == oc) { spp.constructor = sp; } sb.override = function(o) { Ext.override(sb, o); }; /*sbp.superclass = sbp.supr = superclass(spp)*/ sbp.superclass = sbp.supr = (function() { return spp; });//加一层括号暂时看不出意图 知乎解释:分组运算符,与不加效果完全一样 sbp.override = io; Ext.override(sb, overrides); sb.extend = function(o) { return Ext.extend(sb, o); }; return sb; };}();
测试代码
var A = function(){ console.log('A执行') this.A=1;}var B = Ext.extend(A, { constructor:function(B){ console.log('B执行') console.log(this.superclass()) //A.apply(this, arguments); this.superclass().constructor(B); this.B=B; }, B: 3});var C = Ext.extend(B,{ constructor:function(C){ console.log('C执行') console.log(this.superclass()) this.superclass().constructor(7) this.C=C; }, C: 3});var b =new B(5);var c =new C(8);console.log(b,c,b);console.log(b.supr);
阅读全文
0 0
- Ext3.1—继承
- Ext3.2 继承
- ext3
- Ext3.1.1(七) Ext3.1扩展的插件 TreeGrid
- Ext3.2 布局——border layout
- Ext3.2 布局——form layout
- Ext3.2 布局——column layout
- Ext3.2 布局——table layout
- Ext3.2 布局——vbox layout
- Ext3.2 布局——hbox layout
- Ext3.2 布局——anchor layout
- Linux ext2, ext3, ext4 文件系统解读[1]
- Ext3.1-createDelegate函数的委托
- Ext3.2 布局——一个完整的form 表单
- Ext3.0rc1.1发布-不仅仅是绚
- booting ext3
- ext3 JBD
- EXT2/EXT3
- Python网络爬虫(一):初步了解
- 解析中括号json文件
- LeetCode题解 week7
- 树莓派串流客厅电视玩游戏
- 工作中的沟通--提高效率简写
- Ext3.1—继承
- 原生JS实现Ajax跨域请求flask响应内容
- 初试matplotlib
- containsKey方法——判断是否包含指定的键名
- 深入理解Java虚拟机之垃圾收集算法
- nohup方式 真正的后台不挂断运行程序
- C语言实现数据结构链队列
- C++Dijkastra算法实现
- 设计模式【策略模式Strategy Pattern】