虽然Object构造函数或者对象字面量均可以建立单个对象,可是这些方式有个明显的缺点:使用同一个接口建立不少对象,会产生大量的重复代码,为了解决这个问题,如今不少人建立了不少不一样的模式来解决这个问题设计模式
1>工厂模式:工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象建立具体对象的过程函数
function CreatPerson(name,age,job) { var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function () { console.log(this.name); }; return o; } var person1=new CreatPerson('kobe',39,'player'); person1.sayName();
2>构造函数模式:经历4个步骤1>建立一个新对象2>将构造函数的做用域赋给新对象(所以this就指向这个新对象)3>执行构造函数中的代码(为这个新对象添加属性)4>返回新对象this
构造函数就是你用new建立对象时调用的函数。使用构造函数的好处在于全部用同一个构造函数建立的对象都具备一样的属性和方法。spa
function Person(name) { this.name=name; this.sayName=function () { console.log(this.name); } } var person1=new Person('kobe'); var person2=new Person('james'); console.log(person1.name); console.log(person2.name); person1.sayName(); person2.sayName();
console.log(person1 instanceof Person);
console.log(person2 instanceof Person);
3>原型对象:将信息直接添加在原型对象上,咱们建立的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用途的就是能够让全部实例对象共享它所包含的属性和方法
prototype
缺点:使用原型,全部实例对象都有共同的属性和方法,全部会形成很差的影响,设计
1 Person.prototype= { 2 name:'kobe', 3 age:39, 4 sayName:function () { 5 console.log(this.name+'---'+this.age); 6 } 7 } 8 9 var person1=new Person(); 10 person1.sayName();