1.简单的构造函数模式

  function A(a){

    this.a=a;

    this.fn = function(){

      return this.a    

    } 

  }

var a =new A('a');

问题:每次新建一个实例都要重新定义fn方法

2.构造函数+原型模式

解决每次重新定义fn的问题,共享fn方法

  function A(a){

    this.a=a;

  }

  A.prototype.fn = function(){ return this.a; } 

3.强制使用new创建对象

  如果var a = A('a');

  此时的this指向window

  

  function A(a){

    if( !(this instanceof car) ){

      return new A(a);   

    }

    this.a=a;

  }

  A.prototype.fn = function(){ return this.a; }