每天一点点-EXT源码分析之五
2012-01-19 00:47 尔 阅读(129) 评论(0) 收藏 举报
看看EXT对Array的扩展。
首先,Array是函数类型。
其次,直接往构造函数里添加的属性或方法,可以称之为静态,因为它是属于构造函数(类)的,也就是说,必须这样访问。
然后,Ext.applyIf()的作用是第一个参数(对象)拷贝所有在第二个参数里(对象)有而自身没有的属性,
注:在原生的js1.6里indexOf已经写入规范,但各个游览器是否实现并不确定。
所以EXT用的是Ext.applyIf(),为没实现indexOf的游览器在Array.prototype里添加indexOf,并且也添加了一个remove,以便Array的所有实例可以使用,增强了原生的Array的功能。
这俩个函数还是非常简单的,所以其实功能非常有限,只能返回索引值和删除元素
但往往问题总不会那么容易解决,比如如果在对数组元素进行添加,删除等操作时,应该会给用户一个提示框,用以确认,很容易想到,可以
Ext.extend(Array,Ext.util.Observable,{})
来是给以想Array增加添加事件的能力,并且在Ext.extend的第三个参数里添加予以触发特定事件机会的函数。
注意:第三个参数对象里的属性和方法是添加到超类的prototype中的,必须用子类的实例访问
非常幸运
EXT已经提供了一个非常强大的Ext.util.MixedCollection集合类
明白它的实现,明天任务。
首先,Array是函数类型。
其次,直接往构造函数里添加的属性或方法,可以称之为静态,因为它是属于构造函数(类)的,也就是说,必须这样访问。
function P(){
}
P.fn=function(){
alert("静态方法");
}
P.fn();//不可用实例调用
而往构造函数prototype里添加的是实例属性,它属于实例,必须这样访问
function P(){
}
P.prototype.fn=function(){
alert("实例方法");
}
var a=new P();
a.fn();
然后,Ext.applyIf()的作用是第一个参数(对象)拷贝所有在第二个参数里(对象)有而自身没有的属性,
Ext.applyIf(Array.prototype, {
indexOf : function(o){
for (var i = 0, len = this.length; i < len; i++){
if(this[i] == o){
return i;//根据参数值查找其所在的索引位置.
}
}
return -1;//无,返回-1
},
remove : function(o){
var index = this.indexOf(o);
if(index != -1){
this.splice(index, 1);
}
return this;
}
});
注:在原生的js1.6里indexOf已经写入规范,但各个游览器是否实现并不确定。
所以EXT用的是Ext.applyIf(),为没实现indexOf的游览器在Array.prototype里添加indexOf,并且也添加了一个remove,以便Array的所有实例可以使用,增强了原生的Array的功能。
这俩个函数还是非常简单的,所以其实功能非常有限,只能返回索引值和删除元素
但往往问题总不会那么容易解决,比如如果在对数组元素进行添加,删除等操作时,应该会给用户一个提示框,用以确认,很容易想到,可以
Ext.extend(Array,Ext.util.Observable,{})
来是给以想Array增加添加事件的能力,并且在Ext.extend的第三个参数里添加予以触发特定事件机会的函数。
注意:第三个参数对象里的属性和方法是添加到超类的prototype中的,必须用子类的实例访问
非常幸运
EXT已经提供了一个非常强大的Ext.util.MixedCollection集合类
明白它的实现,明天任务。
浙公网安备 33010602011771号