首页 > 代码库 > JS 对象

JS 对象

构造函数个工厂模式创建的对象有什么不同

参考http://www.zhihu.com/question/21220141 方璐的回答

对一个函数之前使用new是将是将该函数当做构造函数来调用,会创建一个该类的实例对象,这个对象的类型是这个函数名,中间使用this.propertyname=value会对该实例对象的属性赋值,并且无论有没有return,都会返回这个对象。

想要创建类,一般用构造函数的方式

function Person(name,age,job){
  this.name=name;
  this.age=age;
  this.job=job;
  this.introduce=function(){
    alert("My name is "+this.name+", I am"+age+"year(s) old, I am a "+job+".");
  }
}

还有一种常见的是工厂模式

function createPerson(name,age,job){
  var o=new Object();
  o.name=name;
  o.age=age;
  o.job=job;
  return o;
}

工厂模式有什么不好呢?工厂模式创建的对象不能通过instanceof来判断类型

var p1=createPerson(‘name‘,11,‘pair‘);
p1 instanceof createPerson    //返回false

var ps=new Person(‘name‘,22,‘sss‘);
ps instanceof Person   //返回true