文件要在 Ext (最上面) 點一下即可
Ext.define 是定義類別的(最後沒有d),可以使用 Ext.create 和 new 的方式使用這個類
※一、使用Ext.create
Ext.define("xxx.ooo", { aaa : "a1", bbb : "b1", ccc : function(){ return this.aaa + " " + this.bbb; } }); var a = Ext.create("xxx.ooo"); Ext.Msg.alert("標題", "我是" + a.aaa, function(){ // var a = Ext.create("xxx.ooo"); 不能寫在裡面 Ext.Msg.alert("call back 標題", a.ccc()); });
※
※覆蓋
Ext.define("xxx.ooo", { aaa : "a1", bbb : "b1" }); Ext.define("xxx.ooo", { aaa : "a2" }); var obj = new xxx.ooo(); alert(obj.aaa); // a2 alert(obj.bbb); // undefined
※因為後者蓋前者,所以 obj.bbb 就沒有了
※setter/getter (config)
Ext.define("xxx.ooo", { config : { ddd : 'abc', eee : 'def' } }); var a = Ext.create("xxx.ooo"); alert(a.getDdd()); // abc a.setDdd('aaa'); alert(a.getDdd()); // aaa
※使用內鍵的 config 就可以做到 setter/getter
※二、使用new
Ext.define("xxx.ooo", { aaa : "a1", bbb : "b1" }); var obj = new xxx.ooo(); alert(obj.message); // undefined obj.message = 'msg'; alert(obj.message); // msg alert(obj.aaa); // a1
※
※繼承 (extend)
Ext.define("xxx.ooo", { aaa : "a1", bbb : "b1" }); Ext.define("xxx.ooo.qqq", { extend: 'xxx.ooo' // 最後沒有「s」,最後也不可加「;」 }); var obj = new xxx.ooo.qqq(); alert(obj.aaa); // a1 alert(new xxx.ooo.qqq().bbb); // b1
※使用內鍵的 extend 可以做到繼承
※因為繼承的關係,所以 aaa 和 bbb 還是有值
※靜態屬性、靜態方法 (statics、inheritableStatics)
Ext.define("xxx.ooo", { aaa : "a1", statics : { // statics,後面有「s」 bbb : "b1", ccc : function(){ return 'ccc'; } }, inheritableStatics : { ddd : "d1", eee : function(){ return 'eee'; } } }); var obj = new xxx.ooo(); alert(obj.aaa); // a1 alert(xxx.ooo.bbb); // b1 alert(xxx.ooo.ccc()); // ccc // alert(obj.ccc()); // Uncaught TypeError: obj.ccc is not a function alert(obj.bbb); // undefined alert(xxx.ooo.ddd); // d1 alert(xxx.ooo.eee()); // eee // alert(obj.ddd()); // Uncaught TypeError: obj.ddd is not a function alert(obj.eee); // undefined
※使用內鍵的 statics 和 inheritableStatics 可以做到靜態
※靜態屬性沒有時是 undefined,但靜態方法沒有時會報錯,以下無法執行
※statics 和 inheritableStatics 差異
Ext.define("xxx.ooo", { aaa : "a1", statics : { // statics,後面有「s」 bbb : "b1", ccc : function(){ return 'ccc'; } }, inheritableStatics : { ddd : "d1", eee : function(){ return 'eee'; } } }); Ext.define("xxx.ooo.qqq", { extend: 'xxx.ooo' //最後不可加「;」 }); alert(xxx.ooo.qqq.bbb); // undefined // alert(xxx.ooo.qqq.ccc()); // Uncaught TypeError: xxx.ooo.qqq.ccc is not a function alert(xxx.ooo.qqq.ddd); // d1 alert(xxx.ooo.qqq.eee()); // eee
※statics 無法被繼承;而inheritableStatics可以
※別名 (alias)
Ext.define("xxx.ooo", { aaa : "a1", alias : 'xo' }); var a = Ext.create('xo'); alert(a.aaa); // alert(new xo()); // Uncaught ReferenceError: xo is not defined
※通過關鍵字 alias 即可達成,但只適用在Ext.create
※備用類別名稱 (alternateClassName)
Ext.define("xxx.ooo", { aaa : 'a1', alternateClassName: ['zzz', 'yyy.zzz'] }); alert(new xxx.ooo().aaa); // a1 alert(new zzz().aaa); // a1 alert(new yyy.zzz().aaa); // a1 alert(Ext.create('yyy.zzz').aaa); // a1
※比 alias 好,使用 new 和Ext.create 都可以
※建構子 (constructor)
Ext.define("xxx.ooo", { aaa : 'default aaa', bbb : 'default bbb', constructor : function(aaa) { this.aaa = aaa; }, constructor : function(aaa, bbb) { this.aaa = aaa; this.bbb = bbb; } }); var obj1 = new xxx.ooo(); alert(obj1.aaa); // undefined alert(obj1.bbb); // undefined var obj2 = new xxx.ooo('a'); alert(obj2.aaa); // a alert(obj2.bbb); // undefined var obj3 = new xxx.ooo('a', 'b'); alert(obj3.aaa); // a alert(obj3.bbb); // b
※注意沒有參數的建構子,屬性都是 undefined,如果沒有加 constructor,可以得到 default aaa和 default bbb
※還有其他內鍵的,在左邊點 Class 即可看見,有 10 個
沒有留言:
張貼留言