当前位置: 首页 > 图文教程 > 网络编程 > AJAX技术 > ECMAScript基础类以及Asp.net Ajax对类Object的扩展

AJAX技术
AJAX 用户注册时的应用实例
ajax readyState的五种状态详解
php AJAX POST的使用实例代码
Ajax 用户名验证是否存在
Ajax+PHP简单基础入门实例教程
AJAX 异步传输数据的问题
ASP AJAX 静态分页
js装载xml文件然后发向服务器的实现代码
完成了AJAX树附原理分析
AJAX 支持搜索引擎问题分析
ajax Suggest类似google的搜索提示效果
Ajax 框架学习笔记
用ajax xml的数据读取的HelloWorld程序
Ajax 表单验证 实现代码
Ajax request response 乱码解决方法
AJAX 随记
ajax 乱码的一种解决方法
ajax session过期问题的几个解决方案
四步学会 Ajax
Ajax异步(请求)提交类 支持跨域

AJAX技术 中的 ECMAScript基础类以及Asp.net Ajax对类Object的扩展


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 86 ::
收藏到网摘: n/a

 
“Everything is Object”,在面向对象的编程语言中谁都知道这句话,但对我来说这是一种感觉,只可意会很难言传。由于我对javascript和薄弱,所以在看Asp.net Ajax类库的同时也翻出了ECMAScript顺便学习学习。在.NET中所有类都是继承自Object,同样在JS中也一样说有都继承Object,因此如果对Object进行了扩展,那所有继承Object类的后代肯定会拥有祖先的血缘。
既然开始学习JavaScript那就顺便在这里提一提他的原始数据类型,在JS中有5个原始数据类型(Undefined、Null、Boolean、Number、String),可以通过typeof来判断变量和值的数据类型
1.        Undefined: 当变量被声明但没有被初始化,或函数没有明确返回一个值的时候,该变量或函数即为 Undefined 类型,是Null类型的一种特性。
2.        Null: 当一个对象的值不存在时,该对象返回null。
3.        Boolean:一看就知道,一男一女true/false,值得注意的是0不等于false,但是可以转化为false。
4.        Number:可以定义32位整型数据或64位浮点型数据。从网上的一些资料知道,浮点数在未被计算之前是以String类型存储(不知道是真是假)。当浮点类型数据很大或很小时(可以前后移动六位),将使用E表示法来表示浮点数据,最大可以存储17位数据。另外,isFinite()方法可以判断一个数值是否有限,isNaN()方法可以判断一个数据是非数字类型。通过parseInt()和parseFloat()可以将其他类型转化为数字类型,如果转化不成功则返回NaN(Not a Number)。
5.        String:这是一个唯一没有大小限制的原始类型,其他类型可以通过toString()转化为String类型,值得一提的是数字转化为String类型可以加入2.8.16作为参数已输出二进制,八进制和十六进制的字符串。
下面我们来看一下Object类型,通过var obj=new Object();可以申明一个对象。同.NET中的Object一样,它是所有类的基类。
它具有两个属性:constructor(相当于.NET中的构造函数)建议一个对象函数引用,对于Object类而言,该引用指向本地Object()方法。Prototype对象里prototype对象的一个引用值,通过这个属性可以反射每个对象中的prototype扩展的属性和方法,在Asp.net Ajax中也是利用这个属性类扩展和反射类的。
hasOwnProperty(property)—判断property属性是否存在于对象中,property数据类型为string;isPrototypeOf(object)— 判断一个对象是否是另一对象的 prototype;propertyIsEnumerable(property)— 判断所给出的属性能否使用 for 语句列举出来;toString()—返回对象的原始类型string;valueOf()—返回对象合适的原始值,对于多数类而言,返回的值和toString()相同。这些就是原始Object对象的方法,在其他类中这些方法以同样被继承。
在Asp.NET Ajax中微软为了将整个类库扩展的更适合.NET的开发人员,在原始的Object对象中扩展了两个方法:
Object.__typeName="Object";
Object.getType=function(b){
  var a=b.constructor;
  if(!a||typeof a!=="function"||!a.__typeName||a.__typeName==="Object")return Object;
  return a
};
Object.getTypeName=function(a){
  return Object.getType(a).getName()
};
从上面我们可以看到,Object.getType(type)这个静态方法可以获取一个类的对象,而Object.getTypeName(type)通过调用[prototype]Type.getName()而获取类的名(包括命名空间)。这没有什么好说的,下面来看一下测试:

        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <div>
        <script language="javascript">
        Type.registerNamespace("NExplus");
        //define a class;
        NExplus.ObjectTest=function(name){
          this._name=name;
        }
        NExplus.ObjectTest.prototype.getName=function(){
          return (this._name === undefined) ? null&