创建单个对象的缺点:用同一个接口创建很多对象,会产生大量的重复代码。
工厂模式就是为了解决这个问题。
工厂模式
解决了创建多个相似对象的问题
function createPerson(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 = createPerson('Mike', 28, 'xxx'); console.log(person1); person1.sayName(); var person2 = createPerson('Mike', 24, 'aaa'); console.log(person2); person2.sayName();
缺点:无法解决对象识别的问题——怎样知道一个对象的类型
构造函数模式
ECMAScript中的构造函数可以用来创建特定类型的对象。
function Person(name, age , job) { this.name = name; this.age = age; this.job = job; this.sayName = function() { console.log(this.name); } } var person1 = new Person('Mike', 28, 'teacher'); console.log(person1); person1.sayName(); var person2 = new Person('Danie', 24, 'doctor'); console.log(person2); person2.sayName();
与工厂模式的区别:
- 没有显示的创建对象
- 将属性和方法赋值给了this对象
- 没有return语句
构造函数本身也是函数,只不过可以用来创建对象
用new操作符新建构造函数的实例,经历4个步骤:

person1 和 person2 分别保存着 Person 的两个不同实例,都有一个 constructor (构造函数) 属性,指向 Person

console.log(person1.constructor == Person); // trueconsole.log(person2.constructor == Person); // true
console.log(person1.constructor == Object); // falseconsole.log(person2.constructor == Object); // false

