ExtJs的一些特性

1、命名空间
定义:对于类的组织定义方式
代码举例:

Ext.namespace("Ext.materialAttribute.index");


和C#里面的命名空间差不多,在Java中类似于包的概念,

Java代码对照:

package Ext.
materialAttribute.index;

 

看以下代码:

Ext.namespace("Ext.materialAttribute.index"); 
Ext.
materialAttribute.index.HelloWorld = Ext.emptyFn;

 

上面代码定义了一个HelloWorld的空函数,等同于:

Ext.namespace("Ext.materialAttribute.index");
Ext.materialAttribute.index.HelloWorld = function(){};

 

可以用以下代码调用:

new Ext.materialAttribute.HelloWorld();

 

2、类实例属性

Ext.namespace("Ext.materialAttribute.index");
Ext.materialAttribute.index.Person = Ext.emptyFn; 
Ext.apply(Ext.materialAttirbute.index.Person.prototype,{name:"name"});
 


上面的代码中,name就是Person的一个属性,Ext.apply是Ext提供的一个静态方法,主要作用是将后面一个参数赋到前面的参数对象上。

Java对照代码:

	private String name = "name";

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

 

可以用以下代码调用:

 

var _person = new Ext.materialAttribute.index.Person();

alert(_person.name); //这里还没有设值,因此弹出默认值name

_person.name = "selfly";

alert(_person.name); //这里已经设过值了,弹出selfly
 
 
3、类实例方法
Ext代码:
print:function(){
	alert(String.format("姓名:{0},性别{1},",this.name,this.sex));
}

Java对照代码:
	public void print(){
		System.out.println("姓名:%s,性别%s",this.name,this.sex);
	}

实例代码:

 

Ext.namespace("Ext.materialAttribute.index");
Ext.materialAttribute.index.Person = Ext.emptyFn;
Ext.apply(Ext.materialAttribute.index.Person.prototype,{
		name:"",
		sex:"",
		print:function(){
			alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
		}
	});

var _person = new Ext.materialAttribute.index.Person();
_person.name = "张三";
_person.sex = "男";
_person.print();

_person.name = "王五";
_person.sex = "女";
_person.print();



4、类静态方法

 

Ext.namespace("Ext.dojochina");
Ext.dojochina.Person = Ext.emptyFn;

Ext.dojochina.Person.print = function(_name,_sex){
	var _person = new Ext.dojochina.Person();
	_person.name = _name;
	_person.sex = _sex;
	_person.print();
}

Ext.apply(Ext.dojochina.Person.prototype,{
		name:"",
		sex:"",
		print:function(){
			alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
		}
	});
	
Ext.dojochina.Person.print("张三","男");
Ext.dojochina.Person.print("王五","女");


5、构造方法

Ext.namespace("Ext.dojochina");
Ext.dojochina.Person = function(_cfg){
	Ext.apply(this,_cfg);
}

Ext.dojochina.Person.print = function(_name,_sex){
	var _person = new Ext.dojochina.Person({name:_name,sex:_sex});
	_person.print();
}

Ext.apply(Ext.dojochina.Person.prototype,{
		print:function(){
			alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
		}
	});
	
Ext.dojochina.Person.print("张三","男");
Ext.dojochina.Person.print("王五","女");


6、支持类继承

 

Ext.namespace("Ext.dojochina");
Ext.dojochina.Person = function(_cfg){
	Ext.apply(this,_cfg);
}

Ext.apply(Ext.dojochina.Person.prototype,{
		job:"无",
		print:function(){
			alert(String.format("姓名:{0},性别:{1},角色:{2}",this.name,this.sex,this.job));
		}
	});
	
	
Ext.dojochina.Teacher = function(_cfg){
	Ext.apply(this,_cfg);
}
Ext.extend(Ext.dojochina.Teacher,Ext.dojochina.Person,{job:"老师"}); //Teacher继承Person并给job重新赋值


Ext.dojochina.Student = function(_cfg){
	Ext.apply(this,_cfg);
}
Ext.extend(Ext.dojochina.Student,Ext.dojochina.Person,{job:"学生"}); //Student继承Person并给job重新赋值
	
	
var _teacher = new Ext.dojochina.Teacher({name:"张三",sex:"男"});
_teacher.print();

var _student = new Ext.dojochina.Student({name:"王五",sex:"女"});
_student.print();


7、类实例方法重写

Ext.namespace("Ext.dojochina");
Ext.dojochina.Person = function(_cfg){
	Ext.apply(this,_cfg);
}

Ext.apply(Ext.dojochina.Person.prototype,{
		print:function(){
			alert(String.format("姓名:{0},性别:{1}",this.name,this.sex));
		}
	});
	
	
Ext.dojochina.Teacher = function(_cfg){
	Ext.apply(this,_cfg);
}
Ext.extend(Ext.dojochina.Teacher,Ext.dojochina.Person,{
	print:function(){
		alert(String.format("{0}是一位{1}老师",this.name,this.sex));
	}
}); //Teacher继承Person并重写print方法

var _teacher = new Ext.dojochina.Teacher({name:"张三",sex:"男"});
_teacher.print();


8、支持命名空间别名、类别名

Ext.namespace("Ext.dojochina");

Dc = Ext.dojochina;

Ext.dojochina.Person = function(_cfg){
	Ext.apply(this,_cfg);
}

PN = Ext.dojochina.Person;


这里把命名空间Ext.dojochina取了一个别名Dc,对于命名空间别名的命名,最好以大写字母开头,

当然小写字母也没错,但这是一个良好的编码规范。

9、支持事件队列
Ext的事件队列模式,由Ext.util.Observable类支持。
 
Ext.namespace("Ext.dojochina");
Ext.dojochina.Person = function(){
	this.addEvents(
		"namechange",
		"sexchange"
	);
}

Ext.extend(Ext.dojochina.Person,Ext.util.Observable,{
		name:"",
		sex:"",
		setName:function(_name){
			if(this.name != _name){
				this.fireEvent("namechange",this,this.name,_name);
				this.name = _name;
			}
		},
		setSex:function(_sex){
			if(this.sex != _sex){
				this.fireEvent("sexchange",this,this.sex,_sex);
				this.sex = _sex;
			}
		}
	});

	
var _person = new Ext.dojochina.Person();

_person.on("namechange",function(_person,_old,_new){
	alert("old name:"+_old+" new name:"+_new);
});

_person.on("sexchange",function(_person,_old,_new){
	alert("old sex:"+_old+" new sex:"+_new);
});

_person.on("namechange",function(_person,_old,_new){
	alert("old name2:"+_old+" new name2:"+_new);
});

_person.setName("张三");
_person.setSex("男");

 

转载于:https://www.cnblogs.com/Adolph-yao/p/3446569.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值