工厂模式
作用
主要用来创建对象
简单工厂模式:用于创建单一的对象
方法工厂模式:用于创建重复创建对象
1.简单工厂模式
/**
简单的工厂函数
1.声明工厂函数 createPerson
2.通过工厂函数来创建对象
* */
function createPerson(name) {
var o = {};//空对象
//在空对象中添加方法
o.name = name;
o.getName = function () {
console.log(this.name)
}
//返回包装好的对象
return o
}
//使用函数
var preson1 = createPerson("zhang san ");
preson1.getName()
console.log(preson1.name)
2.方法工厂模式
/**
方法工厂模式
1.创建多个实例(构造函数)
**/
function Person(name) {
this.name = name;
}
Person.prototype.getName = function () {
console.log(this.name)
}
function Car(model) {
this.model = model
}
Car.prototype.getModel = function () {
console.log(this.model)
}
function create(type, param) {
// return new this[type](param);
/*
安全模式 对this进行判断
*/
if (this instanceof create) {//instanceof 前面是个对象 后面是个构造函数 用于判断后面的构造函数的原型是否存在前面的对象的原型链中
return new this[type](param)
} else {
return new create(type, param)
}
}
create.prototype = {
person: Person,
car: Car
}
var person1 = new create("person", "zhang san");
var car1 = create("car", "benz");
person1.getName()
car1.getModel()
/*
创建person1时 创建了一个新的对象
new create("person", "zhang san") ->{
__proto__:create.prototype
}
当前对象的原型链指向工厂的原型对象
person1=new this[type](param) = new Preson("zhang san"); ->{
__proto__ : Person.prototype,
name:'zhang san'
}
*/