function createPerson(name,age,job){ var o=new Object(); o.name=name; o.age=age; o.job=job; return o; } var p1=createPerson('name',11,'pair'); p1 instanceof createPerson //返回false //事实上instanceof 是通过对比该对象的constructor 是否是右边 但是工厂模式创建出来的对象constructor都是object p1.constructor// 得到function Object() { [native code] } //构造函数模式 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+"."); } } var p2=new Person('name',11,'emp'); //首先需要知道new的事后都发生了什么 //new 会返回一个对象 且该对象的_proto_指向Person的Prototype 而Person的原型的constructor就是Person //所以p2的constructor属性 (等下 p2实例并没有constructor属性啊) 但是它所属类的Person的原型有 于是属性查找到了Person的原型 //显然我们知道类的原型有constructor属性 这个属性指向类(函数)本身 p2.constructor //得到function Person(name,age,job){} p2 instanceof Person // true //原型模式 function Pers(){ } Pers.prototype.name='nico'; Pers.prototype.age=20; var p3=new Pers(); p3.constructor //function Pers(){} p3 instanceof Pers //true
参考 http://www.zhihu.com/question/21220141