烈焰门户技术文章ASP.Net
阅读文章

剖析ASP.NET AJAX的面向对象思想

[日期: 2008-05-05 ] 来源:   作者: [字体: ]

剖析ASP.NET AJAX的面向对象思想

    人们期待已久的ASP.NET AJAX v1.0正式版终于发布了。现在你能用Microsoft ASP.NET AJAX的javascript很容易的写出丰富的、交互式的web应用。尤其值得关注的是Microsoft AJAX Library增加了面向对象的支持,而以前javascript是不支持面向对象开发的。现在icrosoft AJAX Library能很好的支持类、名字空间、继承、接口、枚举、反射等特征。这些新增加的功能类似于.NET Framework,这使得开发ASP.NET AJAX应用变得容易维护,容易扩充。现在我们看看Microsoft AJAX Library是如何支持以上特征的。

  1.类、成员和名字空间

  在Microsoft AJAX Library中,所有的JavaScript类都继承自object(类似于.NET Framework库,都继承自object),在ASP.NET AJAX应用中你可以运用面向对象的编程模式创建继承自Microsoft AJAX基类的对象和组件,类有四种成员:字段、属性、方法、事件。字段和属性是名/值对,用于描述一个类的一个实例的特性的。字段是由简单类型构成且可直接访问,例如:

  myClassInstance.name="Fred"。

  属性可以是任何简单类型或引用类型,通过get和set方法访问。在ASP.NET AJAX中,get和set是独立的函数,并规定在函数名中使用前缀"get_" 或 "set_" ,例如要获取或设置cancel属性的值时,你可以调用get_cancel或set_cancel方法。

  一个方法是完成一个活动的函数而不是返回一个属性的值。属性和方法在下面的例子里都有示范。

  事件指示特指的动作发生。当一个事件发生时,它可以调用一个或多个函数。事件所有者可以完成等待事件发生的任何任务。

  名字空间是对关联类的逻辑分组。名字空间使你可以对公共功能进行分组。

  为了使ASP.NET Web页面具有ASP.NET AJAX功能,你必须添加控件到页面上,当页面启动时,参照ASP.NET AJAX库的脚本自动产生。

  下面的例子显示了页面使用了控件。

  

  下面的例子演示了如何使用Type.registerNamespace和.registerClass方法来把Person类增加到Demo名字空间中、创建类然后注册类。

  

Type.registerNamespace("Demo");
  Demo.Person = function(firstName, lastName, emailAddress) {

  this._firstName = firstName;

  this._lastName = lastName;

  this._emailAddress = emailAddress;

  }

  Demo.Person.prototype = {

  getFirstName: function() {

  return this._firstName;

  },

  getLastName: function() {

  return this._lastName;

  },

  getName: function() {

  return this._firstName + ' ' + this._lastName;

  },

  dispose: function() {

  alert('bye ' + this.getName());

  }

  }

  Demo.Person.registerClass('Demo.Person', null, Sys.IDisposable);


在脚本文件Namespace.js中定义了类Person,制定了类的名字空间为"Demo"。运行页面Namespace.aspx,点击按钮将创建一个Demo.Person类的实例。

  2.访问修饰

  许多面向对象编程语言都有访问修饰的概念。允许你指定类或成员在某种范围内有效。例如可在外部执行的程序、具有相同名字空间的内部类或特指的代码快内的类等。在JavaScript中没有访问修饰,但在ASP.NET AJAX中约定以下划线字符开头"_"的被认为是私有的,类的外部不能访问。

  3.继承

  继承是一个类派生于另一个类的能力。派生类自动继承基类的所有字段、属性、方法和事件。派生类可以增加新的成员或者重写基类已存在的成员来改变成员的行为。

  下面的脚本实例有两个类Person和Employee,Employee从Person继承而来,两个类示范了私有字段的使用,它们都有公共属性、方法。另外Employee类重写了Person类的toString实现,并调用了基类的功能。

  

Type.registerNamespace("Demo");
  Demo.Person = function(firstName, lastName, emailAddress) {

  this._firstName = firstName;

  this._lastName = lastName;

  this._emailAddress = emailAddress;

  }

  Demo.Person.prototype = {

  getFirstName: function() {

  return this._firstName;

  },

  getLastName: function() {

  return this._lastName;

  },

  getEmailAddress: function() {

  return this._emailAddress;

  },

  setEmailAddress: function(emailAddress) {

  this._emailAddress = emailAddress;

  },

  getName: function() {

  return this._firstName + ' ' + this._lastName;

  },

  dispose: function() {

  alert('bye ' + this.getName());

  },

  sendMail: function() {

  var emailAddress = this.getEmailAddress();

  if (emailAddress.indexOf('@') < 0) {

  emailAddress = emailAddress + '@example.com';

  }

  alert('Sending mail to ' + emailAddress + ' ...');

  },

  toString: function() {

  return this.getName() + ' (' + this.getEmailAddress() + ')';

  }

  }

  Demo.Person.registerClass('Demo.Person', null, Sys.IDisposable);

  Demo.Employee = function(firstName, lastName, emailAddress, team, title) {

  Demo.Employee.initializeBase(this, [firstName, lastName, emailAddress]);

  this._team = team;

  this._title = title;

  }

  Demo.Employee.prototype = {

  getTeam: function() {

  return this._team;

  },

  setTeam: function(team) {

  this._team = team;

  },

  getTitle: function() {

  return this._title;

  },

  setTitle: function(title) {

  this._title = title;

  },

  toString: function() {

  return Demo.Employee.callBaseMethod(this, 'toString') + '\r\n' + this.getTitle() + '\r\n' + this.getTeam();

  }

  }

  Demo.Employee.registerClass('Demo.Employee', Demo.Person);


Inheritance.js脚本文件中定义了两个类:Person和Employee,Employee是从Person继承而来。每个类都有字段、公共属性和方法。另外,Employee类重写了toString的实现,并在重写的代码中调用了基类的功能。在这个例子中把类Person的名字空间设定为"Demo"。运行页面Inheritance.aspx,点击“创建对象”、“对象释放”、“公共和私有属性”、“对象方法”、“重写方法”,“对象类型检查”体验一下。

[1] [2] 下一页   
阅读:
录入: ☆我就‰喜欢☆ 打印 错误报告
上一篇: C#截取路径中的文件名
下一篇: 理解ASP.NET与客户端缓存之HTTP协议
相关文章
本文评论(点击查看所有评论
发表评论
希望 寒冷 强悍 惊讶 开心 吃饭 恭喜 流泪 爱你 啊困 心碎
偷笑 咒骂 流汗 大哭 求爱 装酷 砖头 头晕 出气 呲牙 吸烟

点评:


  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规!
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任!
  • 本站管理人员有权保留或删除其管辖留言中的任意内容!
  • 本站有权在网站内转载或引用您的评论!
  • 参与本评论即表明您已经阅读并接受上述条款!
关于烈焰网 | 意见投诉 | 网站地图 | 联系方式 | Ajax技术
Copyright © 烈焰门户 www.Jvqq.Net.Cn All Rights Reserved 京ICP备07022601号