本章仅仅介绍Ext中类的基础知识,一些高级知识会在以后的章节中穿插介绍
注:由于截图上传较为麻烦,且图片占用篇幅较大,所以在以后的文章中如果不是特别必要,将不会插入很多图片,最终的执行结果请大家自行验证。
//使用Ext定义一个类
Ext.define('Person',{
name:'jaune',
age:18
});
//创建一个类
var person = new Person();
console.log(person);
从打出来的结果中可以看出我们定义的属性已经出现在了类中。这是Ext中最简单的类的定义方式
注意上图中的superclass,我们用Ext定义的类如果没有指明继承自哪个类,默认都是继承自Ext.Base,这个类就相当于Java中的Object类,是Ext所有类的基类。如何继承其他类会在下面讲到。
Ext.define('Person',{
name:'jaune',
age:18,
constructor:function(config){
Ext.apply(this,config);
}
});
//创建一个类
var person = new Person({
name:'petty'
});
console.log(person);
这里的apply与第二章中的apply类似,Ext同样有applyIf函数,用法与第二章中的applyIf类似,第二章中的apply和applyIf函数就是仿照的Ext中的这两个函数写的.。如果大家有兴趣查看源码的话可以再Ext的帮助中找到Ext.apply方法然后点击后面的“view source”查看其源码。
//使用Ext定义一个类
Ext.define('Person',{
name:'jaune',
age:18,
constructor:function(config){
Ext.apply(this,config);
}
});
//类的继承
Ext.define('Man',{
extend:'Person',
sex:'Male',
constructor:function(config){
//这里是为了确保创建的对象中的sex属性是Male,如果config中有sex属性就删除这个属性
if(config.hasOwnProperty('sex')){
delete config.sex;
}
/*
* callParent的意思就是调用父类同名的方法,这里用作继承父类构造方法
* 比如父类中有一个toString方法,在子类的toString方法中调用this.callParent()方法,则会执行父类中的toString方法
* 这个大家可以亲自验证
*/
this.callParent([config]);
},
//这个方法是为了方便打印
toString:function(){
return {
name:this.name,
age:this.age,
sex:this.sex
};
}
});
var man = new Man({
name:'tom',
sex:'Female'
});
console.log(man.toString());
/*
* 打印结果如下
* Object {name: "tom", age: 18, sex: "Male"}
*/
man对象创建的过程是,new对象时将config传入Man类的构造函数中,然后Man的构造函数将sex属性过滤掉,然后调用父类的构造方法将config中的属性赋予man对象
/**
* statics 可以包含类的静态和静态方法,但是不能被子类继承
* inheritableStatics 与statics类似但是可以被子类继承
*/
Ext.define('DateUtil',{
inheritableStatics:{
currentDate:Ext.Date.format(new Date(),'Y-m-d'),
getCurrentDate:function(formatStr){
if(Ext.isString(formatStr)){
Ext.Date.format(new Date(),formatStr);
}else{
return this.currentDate;
}
}
}
});
console.log(DateUtil.currentDate);
Ext.define('TimeUtil',{
extend:'DateUtil',
statics:{
currentTime:Ext.Date.format(new Date(),'Y-m-d H:i:s')
}
});
console.log(TimeUtil.currentDate);
上面的两个类,如果DateUtil中用的是statics属性来定义静态属性和方法则TimeUtil无法继承
Ext.define('DateUtil',{
singleton:true,
currentDate:Ext.Date.format(new Date(),'Y-m-d'),
getCurrentDate:function(formatStr){
if(Ext.isString(formatStr)){
Ext.Date.format(new Date(),formatStr);
}else{
return this.currentDate;
}
}
});
console.log(DateUtil);
JS中的单例其实就是将类实例化,可能没有大家想的那么复杂