增强工厂
// 通过类来创建对象
function People(name,age,sex){
this.name = name ;
this.age = age;
this.sex = sex;
}
// 方法
People.prototype.intro = function (){
console.log('我是'+this.name+'性别是'+this.sex+'今年'+this.age);
}
// 创建实例
var p1 = new People('小白',20,'男');
var p2 = new People('小红',21,'女');
var p3 = new People('小兰',21,'女');
// 相同的行为
p1.intro();
p2.intro();
p3.intro();
// 增强型工厂
function factory(name ,age ,sex){
// 创建
var p = new People(name,age,sex);
// 增强
if(p.sex==='女'){
p.msg='hello'
p.say = function (){
console.log(this.msg)
}
}
return p;
}
// 通过工厂创建实例
var p4 = factory('小青',22,'女');
var p5 = factory('小绿',21,'男');
p4.intro();
p5.intro();
console.log(p4);
console.log(p5);
// 增强方法
p4.say();
p5.say()
// 没有增强 不能使用该方法
p1.say()
// 不影响原来类的创建
var p6= new People('小紫',33,'女');
p6.intro()
安全工厂
// 创建数组
var arr1 = new Array(1,2,3)
var arr2 = Array(4,5,6)
console.log(arr1);
console.log(arr2)
// 从类的角度看 是安全类 从工厂角度 是安全工厂
// 通过类来创建
function People(name,age,sex){
// 判断this指向
if(this instanceof People){
// 正常存数据
this.name = name ;
this.age = age;
this.sex = sex;
} else {
// 重新实例化
return new People(name,age,sex);
}
}
// 方法
People.prototype.intro = function (){
console.log('我是'+this.name+'性别是'+this.sex+'今年'+this.age);
}
// 创建示例
var p1 = new People('小白',20,'男')
var p2 = People('小红',21,'女')
console.log(p1)
console.log(p2)
工厂方法
// 创建动物
// 创建狗
function Dog(name){
this.type = '狗';
this.name = name;
}
// 创建猫
function Cat(name){
this.type = '猫'
this.name = name
}
// 创建猪
function Pig(name){
this.type = '猪'
this.name = name
}
// 创建动物
// var dog = new Dog('老大')
// var pig = new Pig('老二')
// var cat = new Cat('老三')
// 通过工厂方法创建
function animal(name,type){
// 根据类型区分类
if(type==='狗'){
return new Dog(name)
} else if (type ==='猫'){
return new Cat(name)
} else {
return new Pig(name)
}
}
var p1 = animal('老大','猫')