首页 > 代码库 > 8月4号=》341页-345页

8月4号=》341页-345页

13.10  使用对象

  13.10.1  面向对象的概念

      JavaScript并不是面向对象的程序设计语言,面向对象设计的基本特征:继承、

      多态等没有得到很好的实现。比如Java中的类,所有的类都可以通过extends显示

      继承父类,或者默认继承系统的Object类。而JavaScript并没有提供规范的语法让

      开发者定义类。

      例如在Java中可以通过下列代码创建Person实例:

        Person p = new Person();

      在JavaScript中的每个函数都可用于创建对象,返回的对象既是该类的实例,也

      是object类的实例。

      代码示范:

        function Person(name)

        {

          this.name = name;

        }

        var p = new Person(‘张三‘);

        if(p instanceof Person)

        {

          alert("p是Person的实例");

        }

        if(p instanceof object)

        {

          alert("p是object的实例");

        }

      结果输出为:"p是Person的实例","p是object的实例"。

 

13.10.2  对象和关联数组

    在JavaScript中的对象本质上是一个关联数组,或者说更像java里德Map数据结构,由一组

    key-value对组成。因此,当需要访问某个JavaScript对象的属性时,不仅可以使用obj.propName

    的形式,也可以采用obj[propName]的形式。

    代码示范:

      function Person(name)

      {

        this.name = name;

      }

      var p = new Person("张三");

      alert(p.name);

    输出结果为:张三。

 

13.10.3  继承和prototype

    在面向对象的程序设计语言里,类与类之间有显示的继承关系,一个类可以显示地制定继承

    自哪个类,子类将具有父类的所有属性和方法。JavaScript虽然也支持类、对象的概念,但

    没有继承的概念,只能通过一种特殊的手段来扩展原有的JavaScript类。

    这种特殊手段也就是函数,JavaScript的所有类都有一个prototype属性,当我们为JavaScript类

    的prototype属性增加函数、属性时,则可视为对原有类的扩展。我们可以理解为:增加了prototype

    属性的类继承了原有的类--这就是JavaScript所提供的伪继承机制。

    代码示范:

      //定义一个Person函数,同时也定义了Person类

      function Person(name,age)

      {

        this.name = name;

        this.age = age;

        this.info = function()

        {

          document.writeln("姓名:"+this.name);

          document.writeln("年龄:"+this.age);

        }

      }

      创建Person的实例p1

      var p1 = new Person("张三",27);

      //此处不可调用walk方法,变量p1还没有walk方法

      //将walk方法增加到Person的prototype属性上

      Person.prototype.walk = function()

      {

        document.writeln(this.name+"正在慢慢溜达");

      }

      //此处p1继承了新方法walk

      //调用info和walk方法

      p1.info();

      p1.walk();

 

    输出结果:姓名:张三 年龄:27 张三正在慢慢溜达。