OO
· 提高複用性,提高可維護性
· 可以使用各種成熟的設計模式
命名空間
·除了避免命名衝突,還有比較重要的就是能使程式員方便的找到他們所需要的類型和類,
在開發中發現很多程式員命名空間的名字起的不知道什麼意思,然後某個命名空間下的類
的功能也不知道做什麼用的,兩種業務相關的類放在一個命名空間下,造成了代碼的層次
混亂,不方面以後維護。
註冊命名空間 Type.registerNamespace("Namespace");
類
·定義建構函式
類的建構函式為function定義
function myFunction(){}
var myfun = new myFunction();
·定義成員
microsoft ajax library 物件導向類型系統將 get_ 和 set_ 開頭的方法認作屬性
【code demo】:
MyNamespace.Myclass = function(param1, ...) //定義建構函式
{
this._myProperty = null;
}
//定義屬性,方法成員 , 注意各個成員之間需要用逗號隔開,要不會出錯
MyNamespace.MyClass.prototype =
{
get_myProperty:function()
{return this._myProperty;},
set_myProperty:function(value)
{this._myProperty=value;},
methodName:function(){}
}
·註冊類
【code demo】:
MyNamespace.Myclass = function(param1, ...)
{
//定義建構函式
}
MyNamespace.MyClass.prototype =
{
//定義屬性,方法成員
}
MyNamespace.MyClass.registerClass('MyNamespace.MyClass'); //註冊類
使用Demo
【code demo】:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script language="javascript" type="text/javascript">
Type.registerNamespace("dongdeNamespace");
dongdeNamespace.Worker = function(name)
{
this._name = name ? name:"(unknown)";
this._bornyear = 0;
}
dongdeNamespace.Worker.prototype=
{
get_name:function()
{
return this._name;
},
get_bornyear:function()
{
return this._bornyear;
},
set_bornyear:function(value)
{
this._bornyear=value;
},
getAge:function()
{
return 2008-this._bornyear;
},
getWorkerDescript:function()
{
return String.format("{0}年齡:{1},出生於:{2}",this._name,this.getAge(),this.get_bornyear()); //不能去除this
}
}
dongdeNamespace.Worker.registerClass("dongdeNamespace.Worker");
var worker = new dongdeNamespace.Worker("dongde");
worker.set_bornyear(1981); //這裡注意為屬性賦值的方式
alert( worker.getWorkerDescript() );
</script>
抽象類別
·包含抽象方法的類為抽象類別
·microsoft ajax library 物件導向類型系統 將包含運行後直接拋出異常的方法的類叫做抽象類別,
直接拋出異常的方法叫做抽象方法
·繼承,調用父類的建構函式,有父類的類必須調用父類的建構函式(否側會丟失繼承效果)
調用父親類的建構函式文法 MyNamespace.MyClass.initializeBase(this,[param1,...]);
[param1,...]參數 表示父類的建構函式的參數名,注意是參數名不是參數值
·註冊時必須提供父類
MyNamespace.MyClass.registerClass("MyNamespace.MyClass",MyNamespace.parentclass);
·定義同名的方法就可以覆蓋父類的抽象方法
·toString方法無法繼承,toString方法是javascript系統內建的一個方法,父類和子類作為對象都有toString方法,
但是沒有繼承
·調用父類的方法 MyNamespace.MyClass.callBaseMethod(this,"MethodName",[param1,...]); //MethodName是父類的方法名
this.MethodName(); //表示調用子類自己的MethodName方法
【code demo】:
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script language="javascript" type="text/javascript">
Type.registerNamespace("dongdeNamespace");
dongdeNamespace.Worker = function(name)
{
this._name = name ? name:"(unknown)";
this._bornyear = 0;
}
dongdeNamespace.Worker.prototype=
{
get_name:function()
{
return this._name;
},
get_bornyear:function()
{
return this._bornyear;
},
set_bornyear:function(value)
{
this._bornyear=value;
},
getAge:function()
{
return 2008-this._bornyear;
},
getWorkerDescript:function()
{
return String.format("{0}年齡:{1},出生於:{2}",this._name,this.getAge(),this.get_bornyear());
},
//抽象方法
getSalary:function()
{
throw Error.notImplemented();
}
}
/////////////////////////////////////////////////////////////////
dongdeNamespace.Manager = function(name)
{
dongdeNamespace.Manager.initializeBase(this,[name]);
}
dongdeNamespace.Manager.prototype=
{
getSalary:function()
{
return 10000;
}
}
//////////////////////////////////////////////////////////////////
dongdeNamespace.AdvanceManager = function(name)
{
dongdeNamespace.AdvanceManager.initializeBase(this,[name]);
}
dongdeNamespace.AdvanceManager.prototype=
{
getWorkerDescript:function()
{
return dongdeNamespace.AdvanceManager.callBaseMethod(this,"getWorkerDescript")+"我工資高吧";
},
getSalary:function()
{
return 18000;
}
}
dongdeNamespace.Manager.registerClass("dongdeNamespace.Manager",dongdeNamespace.Worker);
var worker = new dongdeNamespace.Manager("dongde");
worker.set_bornyear(1981);
alert( worker.getWorkerDescript() +"工資:"+ worker.getSalary() );
dongdeNamespace.AdvanceManager.registerClass("dongdeNamespace.AdvanceManager",dongdeNamespace.Worker);
var worker2 = new dongdeNamespace.AdvanceManager("dongde2");
worker2.set_bornyear(1961);
alert( worker2.getWorkerDescript() +"工資:"+ worker2.getSalary() );
</script>
----未完,請看續篇http://www.cnblogs.com/Brave-Heart/archive/2008/06/26/1230619.html