Ext.namespace("Ext.MyApp"); //定義命名空間。
Ma = Ext.MyApp; //定義命名別名。
Ma.Person = Ext.emptyFn; //Person類,人類在Ext.MyApp這個命名空間下。
Ma.Student = Ext.emptyFn; //Student 類。
Ma.Person = function(_cfg) {
Ext.apply(this, _cfg); //_cfg在實際中是如下格式{Name:'老狼',Sex:'男'}
}
Ma.Student = function(_cfg) { //Student 類這裏註冊了一個名字改變時的事件。
Ext.apply(this, _cfg);
this.addEvents('NameChange'); //註冊事件。
}
Ext.extend(Ma.Person, Ext.util.Observable); //Person類繼承Ext事件類。
Ext.apply(Ma.Person.prototype, {
job:'無', //定義一個屬性。
print: function() { //定義一個方法。
alert(String.format("姓名:{0} -- 性別:{1} --- 職業:{2}", this.Name, this.Sex));
}
});
Ma.Person.Print = function(_Name, _Sex) { //定義了一個Person類的靜態方法。
var Person = new Ma.Person({ Name: _Name, Sex: _Sex });
Person.print();
}
Ext.extend(Ma.Student, Ma.Person, { //Student類繼承了Person類。
job: '我是學生', //重定義父類屬性。
setName: function(_Name) { //添加了一個新的方法用來設置名字。
if (this.Name != _Name) {
this.fireEvent('NameChange', this, this.Name, _Name); //觸發事件的地方。
this.Name = _Name;
}
},
print: function() { //重寫了父類Person的print方法。
alert(String.format("姓名:{0} -- 性別:{1} --- 我的職業是:{2}", this.Name, this.Sex, this.job));
}
});
以下是調用的測試代碼
var st = new Ma.Student({ Name: '小花', Sex: '女' });
st.on("NameChange", function(sender, oldName, newName) { //名字改變時的處理程序
alert(String.format("原來的名字:{0} --- 新的名字:{1} --- 觸發的對象:{2}", oldName, newName, sender));
});
st.setName("傑克老狼"); //設置名字
st.print(); //調用Student類的print函數。