自由時飛揚

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            8 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          1、支持命名空間
          定義:對于類的組織定義方式
          代碼舉例:

          Ext.namespace("Ext.dojochina");


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

          Java代碼對照:

          package Ext.dojochina;

           

          看以下代碼:

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

           

          上面代碼定義了一個HelloWorld的空函數,等同于:

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

           

          可以用以下代碼調用:

          new Ext.dojochina.HelloWorld();


          如果去年上面的命名空間聲明行:Ext.namespace("Ext.dojochina"); 則會出錯!

           

          2、類實例屬性

          Ext.namespace("Ext.dojochina");
          Ext.dojochina.Person = Ext.emptyFn;
          Ext.apply(Ext.dojochina.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.dojochina.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.dojochina");
          Ext.dojochina.Person = Ext.emptyFn;
          Ext.apply(Ext.dojochina.Person.prototype,{
          		name:"",
          		sex:"",
          		print:function(){
          			alert(String.format("姓名:{0},性別:{1}",this.name,this.sex));
          		}
          	});
          
          var _person = new Ext.dojochina.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("");

           
           
           
           
           
           
           
           
           
          posted on 2010-11-26 09:17 selfly 閱讀(138) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 彭山县| 荔浦县| 方山县| 深圳市| 准格尔旗| 大埔区| 岳阳市| 静海县| 安化县| 历史| 济源市| 博湖县| 偃师市| 开鲁县| 张家口市| 永城市| 海林市| 鹰潭市| 灵山县| 德兴市| 三台县| 汕尾市| 金沙县| 昌乐县| 巢湖市| 韶关市| 博白县| 兖州市| 郧西县| 西和县| 吉安县| 牙克石市| 阿坝县| 通州区| 平江县| 麦盖提县| 城步| 乌拉特后旗| 高碑店市| 武陟县| 盐边县|