Microsoft Asp.Net Ajax框架入门(7) 名称空间、类、继承、接口
来源:互联网 发布:chart js 提示最大值 编辑:程序博客网 时间:2024/06/01 09:30
VS 2008
本文介绍如何使用Microsoft Asp.Net Ajax Library编写名称空间、类、继承、接口等OO代码
1. 准备
新建一个"Ajax client library"脚本文件:Person.js
在default.aspx页面上加入ScirptManager控件:
2. namespace
在Person.js中加入代码注册我们定义的名称空间:
3. class
现在我们在Person.js中定义一个Person类:
编写测试代码:
4. inheritance
现在编写一个Student类继承自Person类:
两个步骤实现继承:
1) 子类构造函数中调用 initializeBase方法,第一个param为关键字this,第二个参数为构造函数参数组成的Array
2) 类代码的末尾调用 registerClass方法,标明父类
编写测试代码:
现在我要override sayHello方法:
改一下,我的sayHello方法要先调用一下父类的sayHello方法,然后再接着子类自己的逻辑,那么:
实现步骤:调用callBaseMethod方法,第一参数:this关键字, 第二个参数:要调用的父类的方法名,第三个参数:可选,如果父类的这个方法有参数,则为参数列表组成的Array
运行:弹出提示框 "I am a person, my name is zhenglanzhen"
弹出提示框 "actually I am a student"
5. interface
现在要让Student有行走的行为,定义一个接口 IWalkable:
实现步骤:
1. 方法中都抛异常,避免接口被实例化
2. 调用registerInterface方法
现在要让Student类实现IWalkable接口,对Student类做如下改动:
编写测试代码:
对Student做如下改动:
本文介绍如何使用Microsoft Asp.Net Ajax Library编写名称空间、类、继承、接口等OO代码
1. 准备
新建一个"Ajax client library"脚本文件:Person.js
在default.aspx页面上加入ScirptManager控件:
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="~/Person.js" />
</Scripts>
</asp:ScriptManager>
<Scripts>
<asp:ScriptReference Path="~/Person.js" />
</Scripts>
</asp:ScriptManager>
2. namespace
在Person.js中加入代码注册我们定义的名称空间:
Type.registerNamespace("Tristan");
3. class
现在我们在Person.js中定义一个Person类:
Tristan.Person = function(name) {
this._name = name;
}
Tristan.Person.prototype = {
get_name : function() {
return this._name;
},
set_name : function(name) {
this._name = name;
},
sayHello : function() {
alert('I am a person, my name is ' + this._name);
}
}
Tristan.Person.registerClass("Tristan.Person");
this._name = name;
}
Tristan.Person.prototype = {
get_name : function() {
return this._name;
},
set_name : function(name) {
this._name = name;
},
sayHello : function() {
alert('I am a person, my name is ' + this._name);
}
}
Tristan.Person.registerClass("Tristan.Person");
编写测试代码:
var p = new Tristan.Person('guozhijian');
p.sayHello();
运行:弹出提示框 "I am a person, my name is guozhijian"p.sayHello();
4. inheritance
现在编写一个Student类继承自Person类:
Tristan.Student = function(name) {
Tristan.Student.initializeBase(this, [name]);
}
Tristan.Student.registerClass("Tristan.Student", Tristan.Person);
Tristan.Student.initializeBase(this, [name]);
}
Tristan.Student.registerClass("Tristan.Student", Tristan.Person);
两个步骤实现继承:
1) 子类构造函数中调用 initializeBase方法,第一个param为关键字this,第二个参数为构造函数参数组成的Array
2) 类代码的末尾调用 registerClass方法,标明父类
编写测试代码:
var s = new Tristan.Student("zhenglanzhen");
s.sayHello();
运行:弹出提示框 "I am a person, my name is zhenglanzhen"s.sayHello();
现在我要override sayHello方法:
Tristan.Student.prototype = {
sayHello : function() {
alert('I am a student, my name is ' + this._name);
}
}
运行:弹出提示框 "I am a student, my name is zhenglanzhen" sayHello : function() {
alert('I am a student, my name is ' + this._name);
}
}
改一下,我的sayHello方法要先调用一下父类的sayHello方法,然后再接着子类自己的逻辑,那么:
Tristan.Student.prototype = {
sayHello : function() {
Tristan.Student.callBaseMethod(this, 'sayHello');
alert('actually I am a student');
}
}
sayHello : function() {
Tristan.Student.callBaseMethod(this, 'sayHello');
alert('actually I am a student');
}
}
实现步骤:调用callBaseMethod方法,第一参数:this关键字, 第二个参数:要调用的父类的方法名,第三个参数:可选,如果父类的这个方法有参数,则为参数列表组成的Array
运行:弹出提示框 "I am a person, my name is zhenglanzhen"
弹出提示框 "actually I am a student"
5. interface
现在要让Student有行走的行为,定义一个接口 IWalkable:
Tristan.IWalkable = function() {
throw Error.notImplemented();
}
Tristan.IWalkable.prototype = {
walk : function() {
throw Error.notImplemented();
}
}
Tristan.IWalkable.registerInterface("Tristan.IWalkable");
throw Error.notImplemented();
}
Tristan.IWalkable.prototype = {
walk : function() {
throw Error.notImplemented();
}
}
Tristan.IWalkable.registerInterface("Tristan.IWalkable");
实现步骤:
1. 方法中都抛异常,避免接口被实例化
2. 调用registerInterface方法
现在要让Student类实现IWalkable接口,对Student类做如下改动:
Tristan.Student.registerClass("Tristan.Student", Tristan.Person, Tristan.IWalkable);
标明Student类实现Tristan.IWalkable接口,如果要实现多个接口,那么继续往后加参数 编写测试代码:
var s = new Tristan.Student("zhenglanzhen");
s.walk();
运行:报错了!啊,walk方法还没有实现s.walk();
对Student做如下改动:
Tristan.Student.prototype = {
sayHello : function() {
Tristan.Student.callBaseMethod(this, 'sayHello');
alert('actually I am a student');
},
walk : function() {
alert('I am walking');
}
}
再次运行测试代码,弹出提示框 "I am walking"sayHello : function() {
Tristan.Student.callBaseMethod(this, 'sayHello');
alert('actually I am a student');
},
walk : function() {
alert('I am walking');
}
}
- Microsoft Asp.Net Ajax框架入门(7) 名称空间、类、继承、接口
- Microsoft Asp.Net Ajax框架入门(1) 初览
- Microsoft Asp.Net Ajax框架入门(3) 操作DOM元素
- Microsoft Asp.Net Ajax框架入门(8) 枚举
- Microsoft Asp.Net Ajax框架入门(9) 事件
- Microsoft Asp.Net Ajax框架入门(10) ScriptManager, UpdatePanel, Timer
- Microsoft Asp.Net Ajax框架入门(13) PageRequestManager
- 新瓶旧酒ASP.NET AJAX(2) - 客户端脚本编程(命名空间、类、成员、接口、继承、枚举)
- Microsoft Asp.net Ajax 框架介绍
- Microsoft Asp.Net Ajax框架入门(2) 页面的客户端生命周期
- Microsoft Asp.Net Ajax框架入门(4) 订阅事件处理函数并传递参数
- Microsoft Asp.Net Ajax框架入门(5) Object类型、String类型、Array类型
- Microsoft Asp.Net Ajax框架入门(6) Debugging and Typed Errors
- Microsoft Asp.Net Ajax框架入门(11) 调用内部Web Services
- Microsoft Asp.Net Ajax框架入门(12) 了解异步通信层
- asp.net Ajax框架
- ASP.NET AJAX入门
- ASP.NET AJAX入门
- 爱E聚合桌面
- Microsoft Asp.Net Ajax框架入门(6) Debugging and Typed Errors
- 整合
- 第二十二課 言葉
- tomcat6的MSSQL Server2000数据库连接池设置
- Microsoft Asp.Net Ajax框架入门(7) 名称空间、类、继承、接口
- js动态显示当前日期,时间和星期代码
- gx 特殊的社区系统
- profile
- 转自IBM developer 使用PHPDoc
- 自动化测试
- Microsoft Asp.Net Ajax框架入门(8) 枚举
- JavaScript的技巧
- PHP会员系统(1)