Namespace.js代码: //注册命名空间LinType.registerNamespace("Lin") /**//*************************************************************///定义一个表示相对位置的枚举类型Lin.Position=function()...{ throw Error.notImplemented();}Lin.Position.prototype=...{ Center: 0, Top: 1, Bottom: 2, Left: 3, Rigth: 4}//注册Lin.Position.registerEnum("Lin.Position");/**//*************************************************************///声明一个接IRunnalbeLin.IRunnable=function()...{}//在接口IRunnalbe原型中定义名为run()的空方法Lin.IRunnable.prototype=...{ run: function()...{}}//注册接口Lin.IRunnable.registerInterface("Lin.IRunnable");/**//*************************************************************///Animal 基类的构造函数Lin.Animal = function(name) ...{ this._name=name; } // Animal类的方法 要使用JavaScript中的原型prototype机制Lin.Animal.prototype = ...{ get_Name: function()...{ return this._name; }, set_Name: function()...{ return this._name; }, eat: function()...{ alert("基类:Animal中的eat()方法"); }, cry: function()...{ alert("基类:Animal中的cry()方法!"); }} // 注册基类AnimalLin.Animal.registerClass("Lin.Animal", null, Sys.IDisposable); /**//*************************************************************///定义类:鱼Fish// Lin.Fish.initializeBase(this,[name]);调用父类的构造函数。Lin.Fish=function(name)...{ Lin.Fish.initializeBase(this,[name]);}//让类Fish继承自基类Animal并注册Fish类Lin.Fish.registerClass("Lin.Fish",Lin.Animal);//在基于asp.net ajax客户端框架声明的某个类中,所有的方法均可被子类重写。Lin.Fish.prototype=...{ //子类Fish重写父类中的eat()方法 eat: function() ...{ alert("子类:Fish,重写父类Animal的eat()方法!"); }, //若要在重写方法中调用父类的原方法,可使用callBaseMethod()方法。 cry: function()...{ Lin.Fish.callBaseMethod(this,"cry"); }}/**//*************************************************************///定义类:Dog// Lin.Fish.initializeBase(this,[name]);调用父类的构造函数。Lin.Dog=function(name)...{ Lin.Dog.initializeBase(this,[name]);} Lin.Dog.prototype=...{ //重写Animal类的eat()方法 eat: function()...{ Sys.Debug.trace("狗吃骨头!!"); }, //实现接口中的方法 run: function()...{ Sys.Debug.trace("狗开始跑了!!"); }, get_Position: function()...{ Sys.Debug.trace(Lin.Position.Left); }, clear: function()...{ Sys.Debug.clearTrace(); }, //反射(reflection)可以提供运行时获取程序代码结构的能力。 isTest: function()...{ //反射的prototype方法 语法:NamespaceName.ClassName.[XX()方法] Sys.Debug.trace("反射的prototype方法 语法:NamespaceName.ClassName.[XX()方法]"); //NamespaceName.ClassName.getBaseType() 得到基类的类型 Sys.Debug.trace("类Dog的基类是:"+Lin.Dog.getBaseType()); // NamespaceName.ClassName.getInterfaces() 得到实现的接口集合 Sys.Debug.trace("已实现的接口:"+Lin.Dog.getInterfaces()); Sys.Debug.trace("已实现的接口:"+Lin.Fish.getInterfaces()); //NamespaceName.ClassName.getName() 得到类型名 Sys.Debug.trace("Lin.Dog类型名:"+Lin.Dog.getName()); Sys.Debug.trace("Lin.Fish类型名:"+Lin.Fish.getName()); Sys.Debug.trace("Lin.Animal类型名:"+Lin.Animal.getName()); //NamespaceName.ClassName.inheritsFrom(Namespace.ClassName)判断是否继承了某个类 Sys.Debug.trace("Lin.Dog是否继承Lin.Animal:"+Lin.Dog.inheritsFrom(Lin.Animal)); Sys.Debug.trace("Lin.Dog是否继承Lin.Fish:"+Lin.Dog.inheritsFrom(Lin.Fish)); //NamespaceName.ClassName.implementsInterface(NamespaceName.InterfaceName)判断类是否实现接口 Sys.Debug.trace("类Dog是否实现IRunnable接口:"+Lin.Dog.implementsInterface(Lin.IRunnable)); Sys.Debug.trace("类Fish是否实现IRunnable接口:"+Lin.Fish.implementsInterface(Lin.IRunnable)); //Namespace.ClassName.isInstanceOfType(instance) 判断某个类型的实例是否是这个类型。是返回true,否则返回false Sys.Debug.trace("Lin.Dog是否是Lin.Animal类型:"+Lin.Dog.isInstanceOfType(Lin.Dog)); Sys.Debug.trace("Type的静态方法"); //Type.getRootNamespaces() 得到根命名空间的集合 Sys.Debug.trace("根命名空间的集合:"+Type.getRootNamespaces()); //Type.isClass(Namespace.ClassName) 判断一个类型是否是类,是返回true,否则返回false Sys.Debug.trace("Lin.Dog是否是一个类:"+Type.isClass(Lin.Dog)); Sys.Debug.trace("Lin是否是一个类:"+Type.isClass(Lin)); //Type.isNamespace(Namespace) 判断一个类型是否是命名空间 Sys.Debug.trace("Lin是否是一个命名空间:"+Type.isNamespace(Lin)); //Type.isEnum(TypeName) 判断一个类型是否是枚举类型 Sys.Debug.trace("Lin.Position是否是一个枚举类型:"+Type.isEnum(Lin.Position)); //Type.isFlags(TypeName) 判断一个类型是否是标记 Sys.Debug.trace("Lin.Position是否是一个标记:"+Type.isFlags(Lin.Position)); } }//Lin.Dog继承于Lin.Animal,实现了Lin.IRunnable接口//实现多个接口语法如下://SomeClass.registerClass("SomeClass",SomeBaseClass,IInterface1,IInterface2,IInterface3)Lin.Dog.registerClass("Lin.Dog",Lin.Animal,Lin.IRunnable); default.aspx代码如: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>Namespace</title></head><body> <form id="Form1" runat="server"><%-- 最好在ScriptManager里面加入一个Scirpts标签然后在Scripts里加入 <asp:ScriptReference Path="js"/>,因为使用ScriptManager来引用 会自动导入Asp.Net Ajax的客户端组件的js文件--%> <asp:ScriptManager ID="sm" runat="server" > <Scripts> <asp:ScriptReference Path="Namespace.js" /> </Scripts> </asp:ScriptManager> </form> <div> <p>Animal类中的方法 </p> <input id="btnAnimal" type="button" value="基类Animal构造方法" onclick="return btnAnimal()"/> <input id="btn1" type="button" value="基类Animal:eat()方法" onclick="return btn1Click()" /> <input id="btn2" type="button" value="基类Animal:cry()方法" onclick="return btn2Click()"/> <hr /> <p>Animal的子类Fish类中的方法</p> <input id="btnFish" type="button" value="子类Fish构造方法" onclick="return btnFish()"/> <input id="btn3" type="button" value="子类Fish:eat()方法" onclick="return btn3Click()" /> <input id="btn4" type="button" value="子类Fish调用基类中的cry()方法" onclick="return btn4Click()"/> <hr /> <p>Animal的子类Dog类中的方法</p> <input id="btnDog" type="button" value="子类Dog构造方法" onclick="return btnDog()"/> <input id="btn5" type="button" value="子类Dog:eat()方法" onclick="return btn5Click()"/> <input id="btn6" type="button" value="子类实现接口IRunnable中的run()方法" onclick="return btn6Click()"/> <input id="btn7" type="button" value="得到枚举Position.Left的值" onclick="return btn7Click()"/> <hr /> <input id="btnisTest" type="button" value="反射测试" onclick="return btnisTest()"/> <p>调 试 信 息</p> <textarea id="TraceConsole" style="width: 650px; height: 300px;" rows="5" cols="5"></textarea> <br /> <input id="btnClear" type="button" value="清 除" onclick="btnClear()" /> </div><%-- 使用Asp.Net Ajax客户端编程可能需要用到js文件,那么在页面上需要引入这个js文件。 但是不能使用src=地址这种方法引入文件,因为直接使用这种方法导入文件,要包含 Asp.Net Ajax客户端组件的js文件。--%> <%--<script type="text/javascript" src="Namespace.js" ></script>--%> <script type="text/javascript" language="JavaScript"> var animal = new Lin.Animal("Animal类初始化"); var fish=new Lin.Fish("Fish类初始化"); var dog=new Lin.Dog("Dog类初始化"); //animal function btnAnimal() ...{ alert(animal.get_Name()); return false } function btn1Click() ...{ animal.eat(); return false; } function btn2Click() ...{ animal.cry(); return false; } //fish function btnFish() ...{ //子类继承父类中的get_Name()方法 alert(fish.get_Name()); return false; } function btn3Click() ...{ fish.eat(); return false; } function btn4Click() ...{ fish.cry(); return false; } //dog function btnDog() ...{ alert(dog.get_Name()); return false; } function btn5Click() ...{ dog.eat(); return false; } function btn6Click() ...{ dog.run(); return false; } function btn7Click() ...{ dog.get_Position(); return false; } function btnClear() ...{ dog.clear(); } function btnisTest() ...{ dog.isTest(); return false; } </script></body></html>