js(3)面向对象的程序设计

面向对象(OO)语言都有一个标志,就是都有类的概念,而通过类可以创建多个具有相同属性和方法的对象

一:进行创建对象

1,工厂模式:

工厂模式是使用函数来封装特定接口的创建对象胡细节,代码如下:

function  createPerson(name,age,job){
     var  o=new Object();
     o.name=name;
     o.age=age;
     o.job=job;
     o.sayName=function(){
     alert(this.name)  
      } 
     return o 
}
var Person1=createPerson("zhangningning",21,"doctor")

 缺点:没有解决对象识别的问题

2.构造函数模式:

通过创建自定义的构造函数,

代码如下:

function Person(name,age,job){
     this.name=name;
     this.age=age;
     this.sayname=function(){
                 alert(this.name)  
    }      
}
var person1=new  Person("zhangningning",21,"student")    

使用new操作符的过程:
(1),创建一个新对象

(2),将构造函数中的作用域赋给新对象

(3),执行构造函数中的代码

(4),返回新对象

缺点:会导致不同实例上的同名函数是不相同的

通过构造函数创建的实例中存在一个constructor属性,这个属性指向person

3,原型模式

每个函数都有一个原型属性,属性是一个指针,指向一个对象,对象包含由特定类型的所有实例共享的属性和方法

可以将方法添加到原型中,所有的实例就都会共享

可以通过对象实例访问保存在原型中的值,不能通对象实例重写原型中的值,如果在实例中添加一个属性,这个属性和原型对象中的属性同名,就会覆盖原型中的属性

function Person(){
}
     Person.prototype.name="Nicholas";
     Person.protype.age=29;
     Person.protype.sayname=function(){

        alert(this.name)
}
var person1=new Person();
person1.Sayname();//“Nicholas” 

代码如上:

我们通过给函数的原型上添加属性和方法,可以实现属性和方法的共享,但是由于我们将属性和方法都定义到了函数原型上,因此所有的实例都会共享原型上的属性和方法,为了解决这个问题,我们通过组合使用构造函数模式和原型模式:

4,组合使用构造函数模式和原型模式,这是最常用的一种模式

代码如下:

 

posted @ 2017-05-10 11:58  张宁宁  阅读(160)  评论(0编辑  收藏  举报