左手抓右手

右手加左手

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  在前面的几篇博客中学习到了ECMAScript-262的几种基本数据类型,接下来要学习的就是复杂的数据类型Object、Array、Date、RegExp、Function、基本包装类型和内置对象7种类型,复杂数据类型又称为引用类型。在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。在其他如Java、C#等面向对象的语言中它被称为类(class)。但因为ECMAScript不具备传统的面向对象语言所支持的类和接口等基本结构,因此,在ECMAScript中将其称为类不是很合适。

Object类型

在ECMAScript中,Object是其他一切类型的基类,好比Java中的java.lang.Object。仅仅创建Object类型的实例是没有什么意义的,但关键是理解上面那句话的思想,即Object是js中的基类。Object的每个实例都具有下列的属性和方法:

constructor构造函数—保存用于创建当前对象的函数。如下面的代码实例,对象obj的constructor值是function Object()

<script type="text/javascript">
    var obj = new Object();
    var cons = obj.constructor;
    document.write(cons);  //function Object()
</script>

hasOwnProperty(propertyName)—用于检测给定的属性是否在当前对象实例中(而不是在对象实例的原型中)。其中,作为参数名称的propertyName必须是以字符串形式指定。

<script type="text/javascript">
    var obj = new Object();
    var flag = obj.hasOwnProperty("name");
    var cons = obj.constructor;
    document.write(cons);  //function Object()
</script>

isPrototypeOf(object)—用于检测传入的对象是否是另一个对象的原型。关于原型的知识将在后续博客中介绍。

propertyIsEnumerable(propertyName)—用于检测给定的属性能否使用for-in语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名需以字符串形式指定。

toString()—返回对象的字符串表示;

valueOf()—返回对象的字符串、数值或布尔值表示。

创建Object类型实例的方式有两种:

  1. new操作符;
    function test(){
            var person = new Object();
            person.name = "Hello World!";
            person.age = 23;
        }

    在使用new操作创建新对象时,如果不给构造函数传递参数,那么可以省略后面的那一对圆括号,但是不推荐,如下代码实例所示:

        function test(){
            var person = new Object();
            var obj = new Object;
            person.name = "Hello World!";
            person.age = 23;
        }
  2. 对象字面量表示法。
        var person = {
            name : "Hello World!",
            age : 12
        }

    在上面代码可以看出来,不同的属性之间用逗号隔开,但是最后一个属性后面没有逗号。如果在最后一个属性后面也加了逗号,会在IE和Opera中导致错误。在对象字面量中,属性名也可以是字符串,如

        var obj = {
            "name":"hello world",
            "age":12
        }

    使用对象字面量语法时,如果大括号留空,则可以定义只包含默认方法和属性的对象,起作用和使用new操作符创建对象而不添加属性和方法相同,如下代码

    var person = {} // 等同于var person = new Object();

   在通过对象字面量定义对象时,实际上不会调用Object的构造函数,firefox除外。

  一般来说,访问对象属性都是使用点(.)表示法,在很多的编程语言中都使用这个方法,但在ECMAScript中有另一种表示方法,就是使用方括号,但是在使用方括号时,要将要访问的属性以字符串的形式放在方括号中。如下代码实例所示:

 

    document.write(person.name);
    document.write(person.age);
    document.write(person["name"]);
    document.write(person["age"]);

 

posted on 2012-05-29 23:46  yansj1997  阅读(914)  评论(0编辑  收藏  举报