ExtJs4.2 类的定义、继承相关 define extend config constructor alias等

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
<title>示例2-1 Hello World</title>  
      
    <!--   
    (1)使用ExtJs需要引入的文件    
    ★ext-all.css样式文件。这里替换为其他的css样式文件 则程序的整体css风格就会随之改变。  
        改变主题的下来选择框。最终也是切换CSS样式文件  
    ★bootstrap.js自动根据实际情况来引入ext-all.js或者是ext-all-dev.js  
    ★ext-lang-zh_CN.js 实现ext的本地化。如提示框不引入此文件  按钮为 ok,添加之后为 确定。  
     -->  
    <link rel="stylesheet" type="text/css" href="../js/ext4.2/resources/css/ext-all.css"/>      
    <script type="text/javascript" src="../js/ext4.2/bootstrap.js"></script>  
    <script type="text/javascript" src="../js/ext4.2/locale/ext-lang-zh_CN.js"></script>  
     
     
    <script type="text/javascript">  
          
        /*    
            ★Javascript自定义类  
              
                             原生的Javascript中自定义类  
                             在这段代码中,我们定义了Person类,它具有Name 和 Age 两个属性,具有 Say 和 init 公有方法。  
             当类创建的时候,会定义通过调用init方法实现类的初始化(所以init方法可以看作是类的构造函数)。  
             我们看一下该类的用法:  
            var Tom = new Person("Tom", 26);  
            Tom.Say("Hello");  
        */  
        var Person = function (name, age) {  
            this.Name = "";  
            this.Age = 0;  
            this.Say = function (msg) {  
                alert(this.Name + " Says : " + msg);  
            }  
            this.Cry = function(){  
                alert("cry....");  
            }  
            this.init = function (name, age) {  
                this.Name = name;  
                this.Age = age;  
                alert("init....");  
            }  
            
            //初始化(new Person对象的时候执行 init方法 给name和age赋值  和 执行Cry方法)  
            this.init(name, age);  
            this.Cry();  
        }  
          
        var Tom = new Person("Tom", 26);  
        Tom.Say("Hello");  
          
          
        /**  
             ★ ExtJS 中自定义类  
               
           ExtJS 中自定义类的方法 使用ExtJS.define 方法自定义类  
               我们使用了Ext.define方法自定义一个Ext.Person类,它同样具有Name 和 Age 属性,具有Say 方法,  
          constructor 则为它的构造函数,有了专用的构造函数,我们就省去了写init方法的代码,直接在构造函数中完成对类的初始化,  
               它的使用方法没有改变  
                 
         error:  
            1、Uncaught TypeError: Cannot read property ‘dom’ of null  
            原因:如果代码段没有放入Ext.onReady中  
        */  
        Ext.onReady(function(){  
                
              Ext.define("PersonExt",{  
                    name:'',  
                    age:0,  
                    Say:function(msg){  
                         Ext.Msg.alert(this.Name + " Says:", msg);  
                    },  
                    constructor:function(name,age){  
                        this.Name = name;  
                        this.Age = age;  
                    }  
                });  
                  
                var person = new PersonExt("Tom2", 18);   
                person.Say("Hello2");  
                  
            /////////////////////////////////////////////////////////////////////////////////  
              
            /*   
                ★ ExtJS 中类的继承  
                  
                ExtJS 允许对现有的类进行扩展,其扩展可以通过继承来实现。接下来我们就对刚刚使用ExtJS定义的Person类进行继承,  
                定义一个Developer类,它继承自Person,同时还拥有Coding方法。  
                          
                从代码中可看出,ExtJS 使用 extend来实现继承。我们为Developer 类添加了Coding 方法,这是我们对Person类进行的扩展。  
                        在构造函数中,通过调用this.callParent(arguments)方法,实现对属性的初始化。  
                        需要说明的是,如果此处只调用了父类的构造方法,则可以省略掉,ExtJS 会自动为我们调用父类的构造函数。所以进行简化去掉constructor部分  
                        需要注意的是,如果你在子类中使用了构造函数,ExtJS 则不会再自动调用父类的构造函数。  
            */  
            Ext.define("Developer",{  
                  
                extend:"PersonExt",//继承自Person  
                Coding:function(code){  
                        Ext.Msg.alert("Developer","I can coding -->"+code);                
                },  
                constructor:function(){  
                    this.callParent(arguments);  //在构造函数中,通过调用this.callParent 方法,实现对属性的初始化  
                }  
            });  
              
            var dev = new Developer("Tom3",8);  
            dev.Coding("abc");  
            dev.Say("??????????");  
             
              
              
            /*   
            ★ ExtJS 中类的选项 - config (初始化配置参数,自动生成get set方法)  
            List of configuration options with their default values, for which automatically accessor methods are generated.  
                
            Ext.create方法创建了一个Window 对象,Ext.create 方法的第一个参数是类名,第二个参数是类的选项,它是一个JSON格式的对象,用来初始化Window对象。  
            试想一下,如果我们的类中有几十个属性,那么我们使用构造函数就要传入几十个参数来对它完成初始化,这是一件很恐怖的事情。还好ExtJS 为我们提供了这种便利,  
            我们可以在定义类的时候为它添加配置项,然后调用ExtJS 内置的方法完成初始化,并可以生成访问器(类似于C#里面的get和set方法)。  
              
            */  
            var win = Ext.create("Ext.Window",{    //Ext.Window它对应类的全称是 Ext.window.Window  
                      
                        title: '示例窗口',  
                        width: 300,  
                        height: 200  
            });  
            win.show();  
  
            //新定义PersonNew类,使它可以通过config初始化。 两个地方:config和构造函数this.initConfig(config)  
            Ext.define("PersonNew", {  
                config: {  
                    Name: '',  
                    Age: 0,  
                },  
                Say:function (msg) {  
                    Ext.Msg.alert(this.Name + " Says:", msg);  
                },  
                constructor: function (config) {  
                    this.initConfig(config);  //注意:this.initConfig(config)  
                }  
            });  
              
            //定义personNew类对象的时候,使用Ext.create方法,传入类名PersonNew以及配置项,  
            var personNew = Ext.create("PersonNew", {  
                Name: 'Tom',  
                Age: 26  
            });   
              
            //1方法 personNew.Say("I am PersonNew")     
            personNew.Say("I am PersonNew");  
              
            //2 属性personNew.Name  personNew.Age  
            alert(personNew.Name+"~~~.~~"+personNew.Age);  //Tom~~~~~26  
            alert(personNew.getName()+"~~~get~~"+personNew.getAge());  //Tom~~~~~26  
              
            //3修改属性 (通过config   ExtJS 为我们生成了访问器get和set方法)  
            personNew.setName("OldMan");  
            personNew.setAge(88);  
            alert(personNew.Name+"~~.~~~"+personNew.Age);  //OldMan~~~~~88  
            alert(personNew.getName()+"~~get~~~"+personNew.getAge())  
              
              
        /*   
        ★ExtJS 中类的别名 - alias   
          
        error:  
            1http://localhost:8080/TestExt4.2/phdq/PersonNew2.js?_dc=1418196387104 404 (Not Found)  
            2Uncaught Error: [Ext.Loader] Failed loading synchronously via XHR: 'PersonNew2.js';   
              please verify that the file exists. XHR status code: 404  
              第一个错误,ExtJS的动态加载检测到系统当前没有PersonNew2类的定义,于是就自动加载(当前路径的)PersonNew2.js,  
                                            这个路径是不存在的,于是出现了404未找到错误。  
              第二个错误,Person 未被定义,所以系统抛出类型错误信息。要想解决这个问题,我们需要将Ext.create方法的第一个参数修改为 "MyApp.PersonNew"。  
                        但我们在这里不这样做,因为我们依然希望通过使用PersonNew2来完成,那么怎么办呢?  
                        这时就用到别名了。  
        */  
            Ext.define("MyApp.PersonNew", {  
                config: {  
                    Name: '',  
                    Age: 0,  
                },  
                alias:"PersonNew2", //这时就用到别名了。  
                Say: function (msg) {  
                    Ext.Msg.alert(this.Name + " Says:", msg);  
                },  
                constructor: function (config) {  
                    this.initConfig(config);  
                }  
            });  
          
            var Tom = Ext.create("PersonNew2", {  //这时就用到别名了。PersonNew2等价于MyApp.PersonNew  
                Name: 'Tom',  
                Age: 26  
            });  
            Tom.Say("HelloXXXXXXXX");  
          
        });  
    </script>  
</head>  
<body>  
  
</body>  
</html>  

猜你喜欢

转载自blog.csdn.net/whb054/article/details/80476654
今日推荐