ExtJs源码分析与学习—ExtJs核心代码(一)
首先声明一下,以下部分内容摘自网上
?
一、?有了上一篇ExtJs源码结构和ExtJs自带的调试工具后,下面介绍一下ExtJs最核心的部分ext-core
二、?首先看Ext.js文件
?
ExtJs核心代码之一,主要实现对象的继承
该方法有两种执行
其一,只传o,c时直接将c上的所有属性/方法拷贝给o后返回;
其二,defaults也传时,会将defaults,c上的所有属性/方法都拷贝给o ,传三个参数时,首先拷贝defaults,然后再拷贝c,这个方法的实现蛮有意思的。
有了该方法后,ExtJs中对象之间的继承就变得容易多了,只要调用该方法,就可以把A对象上的所有方法复制到B对象上。?
/** * Adds a list of functions to the prototype of an existing class, overwriting any existing methods with the same name. * Usage:<pre><code>Ext.override(MyClass, { newMethod1: function(){ // etc. }, newMethod2: function(foo){ // etc. }});</code></pre> * @param {Object} origclass The class to override * @param {Object} overrides The list of functions to add to origClass. This should be specified as an object literal * containing one or more methods. * 将对象overrides的所有属性/方法拷贝到类origclass的原型上。 * 需要注意的是后面的if判断,IE中for in不能遍历对象的Object的toSting等方法, * 因此需要特别处理一下。IE9 beta重写对象的内置方法如toString后是可用for in遍历的 * @method override */ override : function(origclass, overrides){ if(overrides){ var p = origclass.prototype; Ext.apply(p, overrides); if(Ext.isIE && overrides.hasOwnProperty('toString')){ p.toString = overrides.toString; } } },?
该方法实现了将对象overrides的所有属性/方法拷贝到类origclass的原型上。需要注意,IE中for in不能遍历对象的Object的toSting等方法,因此需要特别处理一下。在IE9 beta重写对象的内置方法如toString后是可用for in遍历的,见?for in的缺陷?。
?
Ext.extend是js继承最经典的实现方式了,参考我之前写的?ExtJs中继承的实现与理解—extend