面向对象理解

来源:互联网 发布:微信淘宝客机器人软件 编辑:程序博客网 时间:2024/06/03 21:23

面向对象的概念:

     理解面向对象首先要理解类的概念,通过类可以创建多个具有相同属性和方法的对象。但在ECMAScript当中并没有类的概念,因此它的对象也与给予类的语言中的对象有所不同。

对象理解:

 

  1.创建自定义对象:就是创建一个object的实力,然后再为它添加属性和方法,如下所示。

    var person=new Object();

    person.name="a"

    person.age=29;

    persin.job="teacher"

    person.sayName=function(){

      alert(this.name)    

    }

  2.字面量语法:

    var person={

        name="a",

        age=29,

        job="teacher"

        sayName=function(){

          alert(this.name)    

        }

      }

  虽然上述两种对象构造方法可以构造单个对象,但是如使用同一接口构造多个对象是就会产生大量的重复的代码,为了解决这个问题,人们开始使用多种一口多建的方法创建,例如工厂模式、构造函数模式、原型模式等。

  ㈠工厂模式

    工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程,考虑到在ECMAScript中无法创建类,开发人员就发明了一种函数,用函数来封装以特定的接口创建对象的细节。如下所示。

    fuction createPerson(name,age,job){

      var o=new Object();

      o.name=name;

      o.age=age;

      o.job=job;

      o.sayName=fuction(){

        alert(this.name)

      }

      return o;

    }

  var person1=createPerson("xiaohong","doctor","23")

  var person2=createPerson("liudong","teacher","28")

    工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(既怎样知道一个对象的类型)。于是乎,又一个新模式出现了。那就是构造函数模式。

  ㈡构造函数模式

    像Object、array.这样的原生构造函数在运行是会自动出现在执行函数中。此外也可以自定义的构造函数,从而定义自定义的对象类型的属性和方法。例如可已使用构造函数的弄湿将前面的例子重写如下。  

fuction Person(name,age,job){

      

      this.name=name;

      this.age=age;

      this.job=job;

      this.sayName=fuction(){

        alert(this.name)

      }

      

    }

  var person1=new Person("xiaohong","doctor","23")

  var person2=new Person("liudong","teacher","28")

    在这个例子中,我们可以注意到两个创建对象函数的相同之处外,还可以注意到不同之处。

    1.没有显示地创建对象。

    2.直接将属性和方法赋给了this对象

    3.没有return语句。

  ㈢原型模式

  我们创建的每一个函数都有prototype属性,这个属性是一个指针,执行一个对象,而这个对象的用途是包含可以有特定类型的所有实例共享的属性和方法。使用原型对象的好处是可以让所有对象实例共享它所包含的属性和方法。如下面的例子所示。

function Person(){

}

Person.prototype.name="a";

person.prototype.age=29;

Person.prototype.job="teacher";

Person.prototype.sayName=function(){

alert(this.name);

}    

var Person1=new Person();

Person1.sayName();//"a"

  在此,我们将sayName()方法和所有 的属性直接添加到了Person的prototype属性中,构造函数变成了空函数。即使如此,也仍然可以通过构造函数来创建新对象,而且新对象还会具有相同的属性和方法。但与构造函数模式不同的是,新对象的这些属性和方法是由所有实例共享的。

原创粉丝点击