接上篇http://www.cnblogs.com/Brave-Heart/archive/2008/06/25/1229839.html
接口
·构造函数抛出异常
·所有的方法抛出异常
·registerInterface方法用来注册接口
·接口不能继承其他的接口
·定义(和定义类很相似)
MyNamespace.IMyInterface = function()
{
throw Error.notImplemented();
}
MyNamespace.IMyInterface.prototype=
{
myMethod:function()
{
throw Error.notImplemented();
},
......
}
MyNamespace.IMyInterface.registerInterface("MyNamespace.IMyInterface");
·实现接口
使用registerClass方法传入额外的参数实现接口
MyNamespace.MyClass.registerClass("MyNamespace.MyClass",null,MyNamespace.IMyInterface1,IMyInterface2,...);
//第二个参数null表示没有父类
【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.IWorker = function()
{
throw Error.notImplemented();
}
dongdeNamespace.IWorker.prototype=function()
{
getSex:function()
{
throw Error.notImplemented();
}
}
dongdeNamespace.IWorker.registerInterface("dongdeNamespace.IWorker");
dongdeNamespace.Worker.registerClass("dongdeNamespace.Worker",null,dongdeNamespace.IWorker);
//dongdeNamespace.Worker.registerClass("dongdeNamespace.Worker");
var newWorker = new dongdeNamespace.Worker();
alert( dongdeNamespace.IWorker.isImplementedBy(newWorker) ); //isImplementedBy反射方法,
判断newWorker对象有没有实现dongdeNamespace.IWorker接口
</script>
枚举
·枚举即为number
·很大的好处就是争强可读性,发现很多初写程序的人表示某种状态都是用数字1,2,3...来表示,这样做代码的可读性不强,不好理解
·每个枚举类型都有toString和parse方法
·定义
MyNamespace.MyEnum = function()
{
throw Error.notImplemented();
}
MyNamespace.MyEnum.prototype=
{
Item1: 1,
Item2: 2,
Item3: 3
}
MyNamespace.MyEnum.registerEnum("MyNamespace.MyEnum",[,true]);
【code demo】:稍微简单的列子
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script language="javascript" type="text/javascript">
Type.registerNamespace("MyNamespace");
MyNamespace.MyEnum = function()
{
throw Error.notImplemented();
}
MyNamespace.MyEnum.prototype=
{
Item1: "dongde",
Item2: "ling",
Item3: "mary"
}
MyNamespace.MyEnum.registerEnum("MyNamespace.MyEnum");
alert(MyNamespace.MyEnum.Item1);
alert(MyNamespace.MyEnum.toString(MyNamespace.MyEnum.Item1));
</script>
反射方法
Type.prototype.getBaseType
Type.prototype.getInterfaces
Type.prototype.getName
Type.prototype.implementsInterface
Type.prototype.inheritsFrom
Type.prototype.isImplementedBy
Type.prototype.isInstanceOfType
Type.getRootNamespaces
Type.isClass
Type.isInterface
Type.isNamespace
Type.isEnum
Type.isFlags
Type.parse
Object.getType
Object.getTypeName