javascript构造器模式创建对象

  工厂模式创建对象,虽然符合正常思维。

  但由于对象在函数内部定义,故无法得知对象的类型(均为Object)。

  使用构造器模式,可以创建特定类型的函数实例:

  function Dog(age,size)
  {
    this.age=age;
    this.size=size;
    this.toAge=function(){
      alert(this.age);
    };
  }

  var dog1=new Dog(10,20);
  var dog2=new Dog(22,1);

  此时,上述函数可以认为是对象的构造函数。

  例子中,直接将属性赋值给了this对象,而创建对象的构造函数和构造器相同,例如:

  alert(dog1.constructor==Dog);//true

  那么,所创建的对象类型是什么呢?

  alert(dog1 instanceof Object);//true
  alert(dog1 instanceof Dog);//true

  对,构造函数可以将他的实例标识为一种特定的类型Dog类型。

  并且构造函数作为函数,当然可以单独调用:

//作为普通函数调用
  Dog(11,22);//添加到了window作用域
  window.toAge();//11
//在另外一个对象的作用域中调用
  var o ={};
  Dog.call(o,11,22);
  o.toAge();//11

  但是上述构造器,在生成实例时,实际操作如下代码:

  function Dog(age,size)
  {
    this.age=age;
    this.size=size;
    this.toAge= new Function("alert(this.age)");
  }

  显然,每一个实例都有一个Function实例。

  alert(dog1.toAge==dog2.toAge);//false

  因此我们可以将函数定义转移到构造器外部。

  function Dog(age,size)
  {
    this.age=age;
    this.size=size;
    this.toAge=toAge;
  }

  function toAge()
  {
    alert(this.age);
  }
 
  var dog1=new Dog(11,22);
  var dog2=new Dog(2,33);

  此时,减少了内存使用。但是,全局函数你懂的...

原文地址:https://www.cnblogs.com/stonl/p/4255249.html