- 浏览: 1465734 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
Extjs 中的模拟继承使用很多,比如 Component 是所有 extjs 组件的基类,机制就是 Ext.extend 函数 ,所有组件实例化前都要调用父类组件的实例化程序,如:
Container :
// private initComponent : function(){ Ext.Container.superclass.initComponent.call(this); ..... }
这个机制也可用于一般的情况,如:
function base(){ } base.prototype.parentMethod=function(str){ alert('父类执行:'+str); } var child=Ext.extend(base,{ parentMethod:function(str){ //很不方便 child.superclass.parentMethod.apply(this,[str]); //这样不是很好么 //this.supermethod(str); } }); var c=new child(); c.parentMethod('原来的ext.extend');
就像注释中所说的,在一个子类方法中要调用父类的方法,extjs的写法有点啰嗦 ,若是override的那么直接supermethod 不就可以了么。
部分借鉴了 base2 中所实现的 javascript 类模拟机制,改造了一下 Ext.extend 很容易就实现了上述简单的写法:
改进的 Ext.extend
(function(){ //函数中是否包含调用父类对应函数的代码(opera 函数不能表示) var hasSuper= /supermethod/.test(function(){supermethod;}) ? /\bsupermethod\b/ : /.*/; Ext.extend = function(){ // inline overrides var io = function(o){ for(var m in o){ this[m] = o[m]; } }; var oc = Object.prototype.constructor; return function(sb, sp, overrides){ if(typeof sp == 'object'){ 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; //不直接设置 sb.prototype = new F(); //sbp = sb.prototype = new F(); sbp = new F(); // 手动设置 for (var name in overrides) { if(!overrides.hasOwnProperty(name)) return; // 父类有这个函数 sbp[name] = typeof overrides[name] == "function" && typeof sbp[name] == "function" //并且 override的函数调用了父类函数 && hasSuper.test(overrides[name]) ? (function(name, fn){ return function() { var tmp = this.supermethod; //调用时把父类的函数存在自己的context中,供子类函数调用 this.supermethod = spp[name]; var ret = fn.apply(this, arguments); //恢复原状,只保证调用时可以就行了 this.supermethod = tmp; return ret; }; })(name, overrides[name]) : overrides[name]; } sb.prototype=sbp; sbp.constructor=sb; sb.superclass=spp; if(spp.constructor == oc){ spp.constructor=sp; } sb.override = function(o){ Ext.override(sb, o); }; sbp.override = io; //不需要了,前面手动做了 //Ext.override(sb, overrides); sb.extend = function(o){Ext.extend(sb, o);}; return sb; }; }(); })();
当然这样的话,用了闭包保存了原来的函数,内存以及效率上应该不如以前了,但是对于override的函数可以很直接的使用:
改进后的使用
child=Ext.extend(base,{ parentMethod:function(str){ this.supermethod(str); alert("call child"); }, //原来用法保留 otherMethod:function(){ child.superclass.parentMethod.apply(this,['test2']); } }); grand=Ext.extend(child,{ parentMethod:function(str){ this.supermethod(str); alert("call grand"); } }); var c=new grand(); c.parentMethod('改进的ext.extend'); c.otherMethod();
- extend.zip (45.6 KB)
- 下载次数: 21
发表评论
-
模块化高扩展性的前端框架 KISSY
2013-03-14 14:58 8634模块化高扩展性的前端框架 KISSY 注:本文为 2 ... -
构建前端 DSL
2012-10-11 22:10 5373目前在传统的软件开 ... -
KISSY kisses bootstrap navbar
2012-08-03 01:12 6058看了下 bootstrap 的导航菜单,立刻非常喜欢,注意是浅 ... -
promise api 与应用场景
2012-02-07 17:34 7402promise 是 commonjs 社区中提出的异步规范,其 ... -
unified event model
2011-10-14 23:02 1790为了处理原生事件在各 ... -
转载:瀑布流布局浅析
2011-09-29 19:02 2853简介 如果你经 ... -
cross domain request
2011-09-29 18:39 2852场景 跨域请求是随着 ... -
基于多继承的树设计
2011-09-18 03:42 2271分类 树是一种常见 ... -
caja 原理 : 前端
2011-09-01 16:48 7077作为前端开放的基础安全保证,caja 是目前比较合 ... -
ie 下 cloneNode 导致的属性克隆
2011-08-24 16:10 2483这个还是很值得记下,一直存在的很大隐患终于解决,由于在 ie& ... -
just another event model
2011-06-08 20:47 2173事件模型也算是客户端兼容性的一个长期问题,早期 jquery ... -
框架 build 系统介绍
2010-07-11 01:29 1664一个复杂的类库通常都包括很多子模块( jquery@git ... -
querySelectorAll 探讨
2010-07-01 22:35 5247随着css selector engine在越来越多的java ... -
再谈 attribute
2010-06-22 11:37 2683@slideshare 原生: ... -
事件机制探讨
2010-06-21 13:54 2247由于浏览器事件机制的不兼容性,譬如最常见的注册事件差异 ... -
利用Attribute重构:业务与UI分离
2010-06-08 16:54 1593很简单的一个应用 通过按钮来限制输入范围 ,这样的话再 ... -
yui3 loader的串行加载特性
2010-06-04 12:30 1818yui3 的沙箱机制可以在 ... -
yui3下的load事件触发
2010-06-01 13:31 3250以前的一些总结:页面l ... -
理解YUI3 extension:Base.create
2010-05-31 03:01 2008YUI3中为了避免不必要的类继承层次,以及摆脱利用原型链模拟的 ... -
google WebFont Loader 源码阅读
2010-05-22 01:04 2791资料: 关于新发 ...
相关推荐
`Ext.extend`是Ext JS库中的一个核心方法,用于实现类的继承机制。在JavaScript中,由于语言本身没有内置的类概念,所以通常通过原型链(prototype)来模拟类的继承。`Ext.extend`就是这样一个工具,它使得创建类的...
Leangle.form.combo.ColorComboBox = Ext.extend(Leangle.form.BaseComboBox, { // ComboBox configurations store: new Ext.data.JsonStore({ // store configurations }) }); ``` 在这种情况下,尝试使用`Ext...
jquery.validate.extend.js
原生js实现jquery $.extend方法 通过遍历对象属性来实现
`$.fn.extend`是jQuery库中的一个核心方法,主要用于扩展jQuery对象的方法集合。这个方法允许开发者自定义jQuery的函数,从而实现对DOM元素的操作或添加新的功能。在jQuery中,`$.fn`实际上是`$.prototype`的一个...
在JavaScript开发中,`underscore` 和 `jQuery` 都提供了扩展对象的功能,即 `_.extend()` 和 `$.extend()` 方法。这两个方法允许开发者合并一个或多个对象的属性到目标对象中,实现对象间的属性拷贝。本文将深入...
extend: 'Ext.data.Model', fields: ['id', 'name', 'email'] }); var store = Ext.create('Ext.data.Store', { model: 'MyModel', proxy: { type: 'ajax', reader: { type: 'xml', record: 'item' // XML...
在JavaScript中,jQuery库提供了两种扩展对象的方法,即`$.fn.extend`和`$.extend`。它们都用于增加或修改现有对象的功能,但应用场景不同。本文将深入解析这两种方法的实现原理和用途。 首先,`$.fn.extend`是用于...
在jQuery的API中,`jQuery.extend`和`jQuery.fn.extend`是两个重要的方法,它们用于合并对象属性,但作用范围和用途有所不同。本文将深入探讨这两个方法的差异,并通过实例解析它们的工作原理。 首先,`jQuery....
Most configuration options are inherited from Ext.Window (see ExtJs docs). The added ones are: url - the url where to post uploaded files. base_params - additional post params (default to {}). ...
关于这个原因有很多种,我只说下我遇到的 我这样 写Store来复用的 代码如下: DocStore = Ext.extend(Ext.data.Store,{ initComponent:function(){ this.proxy = new Ext.data.HttpProxy({url:this.url}); this....
4. `Ext.extend( Object subclass, Object superclass, [Object overrides] )`: 这是实现面向对象编程的关键函数,它用于创建子类,将`subclass`扩展自`superclass`。`overrides`参数用于提供子类覆盖父类的方法或...
"ext多选下拉列表的全选功能实现"这个主题聚焦于一个特定的UI组件——ExtJS库中的MultiComboBox,这是一种允许用户多选的下拉列表控件。在实际应用中,全选功能常常被用来快速选择所有选项,极大地提高了用户的操作...
在`ext-extend.js`这个文件中,可能包含了对`Ext.extend()`的进一步实现和扩展,或者展示了如何在实际项目中重写`Ext`库的方法。通常,这样的代码示例会包含具体的类定义、方法重写以及如何在应用中使用这些自定义类...
6. `Ext.extend(Object subclass, Object superclass, [Object overrides])`: 这是实现JavaScript继承的关键函数。`subclass`是子类,`superclass`是父类,`overrides`是子类要覆盖或扩展父类的方法。它创建了一个新...
**jQuery.extend** jQuery.extend是jQuery库中的一个非常重要的方法,用于合并两个或更多对象的属性到第一个对象上。这个功能在开发过程中非常实用,尤其是在处理配置选项、扩展插件或者对象继承时。让我们深入探讨...
Ext.extend(Ext.layout.container.MyIFrameLayout, Ext.layout.container.Fit, { onLayout: function(ct, target) { var iframe = ct.items.first(); if (iframe && iframe.rendered) { var iframeBody = ...
可以通过`Ext.extend()`方法实现这一点。 ```javascript Ext.define('MyApp.form.field.ClearableDate', { extend: 'Ext.form.field.Date', alias: 'widget.clearabledatefield', // 添加其他配置项... }); ``...
在jQuery中,`$.extend()`、`.fn`(即`jQuery.fn`)和`.fn.extend()`是开发者用于增强其功能和创建插件的关键部分。下面我们将详细探讨这三个概念。 1. `$.extend()` `$.extend()`方法用于合并一个或多个对象的属性...