Namespace.js代码:
//
注册命名空间Lin
Type.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 " );
/**/ /*************************************************************/
// 声明一个接IRunnalbe
Lin.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()方法!");
}
}
// 注册基类Animal
Lin.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);
Type.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 " );
/**/ /*************************************************************/
// 声明一个接IRunnalbe
Lin.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()方法!");
}
}
// 注册基类Animal
Lin.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 >
" 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 >