创建对象

  正如前文介绍的,JavaScript对象是一个特殊的数据结构,JavaScript对象只是一种特殊的关联数组。创建对象并不是总需要先创建类,与纯粹面向对象语言不同的是,JavaScript中创建对象可以不使用任何类。JavaScript中创建对象大致有3种方式:
  ➢ 使用new关键字调用构造器创建对象。
  ➢ 使用Object直接创建对象。
  ➢ 使用JSON语法创建对象。

使用new关键字调用构造器创建对象

  使用new关键字调用构造器创建对象,这是最接近面向对象语言创建对象的方式,new关键字后紧跟函数的方式非常类似于Java中new后紧跟构造器的方式,通过这种方式创建对象简单、直观。JavaScript中所有的函数都可以作为构造器使用,使用new调用函数后总可以返回一个对象。

例子
<script type="text/javascript">  
    // 定义一个函数,同时也定义了一个Person类
    function Person(name , age)
    {
        //将name、age形参赋值给name、age实例属性
        this.name = name;
        this.age = age;
    }
    // 分别以两种方式创建Person实例
    var p1 = new Person();
    var p2 = new Person('yeeku' , 29);
    // 输出p1的属性
    document.writeln("p1的属性如下:"
        + p1.name + p1.age + "<br />");
    // 输出p2的属性
    document.writeln("p2的属性如下:" 
        + p2.name + p2.age);
</script>  

使用Object直接创建对象

  JavaScript的对象都是Object类的子类,因此可以采用如下方法创建对象。
  var myObj=new Object();
  这是空对象,该对象不包含任何的属性和方法。与Java不同的是,JavaScript是动态语言,因此可以动态地为该对象增加属性和方法。在静态语言(如Java、C#)中,一个对象一旦创建成功,它所包含的属性值可以变化,但属性的类型、属性的个数都不可改变,也不可增加方法。
  JavaScript既可以为对象动态地增加方法,也可以动态地增加属性。JavaScript还可以通过new Function()的方法来定义匿名函数,因此完全可以通过这种方式来为JavaScript对象增加方法,也允许将一个已有的函数添加为对象的方法。

例子
<script type="text/javascript">  
    //创建空对象
    var myObj = new Object();
    //为空对象增加属性
    myObj.name = 'yeeku';
    myObj.age = 29;
    //创建一个函数
    function abc()
    {
        document.writeln("对象的name属性:" + this.name);
        document.writeln("<br />");
        document.writeln("对象的age属性:" + this.age);
    };
    //将已有的函数添加为对象的方法
    myObj.info = abc;
    document.writeln("<hr />");
    //调用方法
    myObj.info();
</script>  
注意

  为对象添加方法时,不要在函数后添加括号。一旦添加了括号,将表示要把函数的返回值赋给对象的属性。

使用JSON语法创建对象

  JSON(JavaScript Object Notation)语法提供了一种更简单的方式来创建对象,使用JSON语法可避免书写函数,也可避免使用new关键字,可以直接创建一个JavaScript对象。为了创建JavaScript对象,可以使用花括号,然后将每个属性写成“key : value”对的形式。
  使用JSON语法创建JavaScript对象时,属性值不仅可以是普通字符串,也可以是任何基本数据类型,还可以是函数、数组,甚至可以是另外一个JSON语法创建的对象,例如:

person =  
{
    name : 'yeeku',
    gender : 'male',
    //使用JSON对象为其指定一个属性
    son : {
        name : 'nono',
        grade : 1
    },
    //使用JSON语法为person直接分配一个方法
    info : function()
    {
        document.writeln("姓名:"+this.name);
    }
}

  使用JSON创建数组的语法格式如下:   arr = [value1, value2...]

例子
<script type="text/javascript">  
    // 定义一个对象
    var person =
    {
        // 定义第一个简单属性
        name : 'wawa',
        // 定义第二个简单属性
        age : 29 ,
        // 定义第三个属性:数组
        schools : ['小学' , '中学' , "大学"],
        // 定义第四个属性,对象数组
        parents :[
            {
                name : 'father',
                age : 60,
                address : '广州'
            } 
            ,
            {
                name : 'mother',
                age : 58,
                address : '深圳'
            }
        ]
    };
    alert(person.parents);
</script>  

  实际上,JSON已经发展成一种轻量级的、跨语言的数据交换格式,目前已经明确支持JSON语法的编程语言非常多,比如Java、C/C++、C#、Ruby、Python、PHP、Perl等主流编程语言都支持JSON格式的数据。
  由于JSON格式的数据交换具有轻量级、易理解、跨语言的优势,因此JSON格式已成为XML数据交换格式的有力竞争者。

注:本博客内容节选自李刚编著的疯狂HTML 5/CSS 3/JavaScript讲义 ,详细内容请参阅书籍。