1.工厂模式 使用工厂函数批量创建对象
优点:可以批量创建对象
缺点:无法区分种类创建对象都是Object的实例 方法冗余
var sayName = function(){
console.log(this.name)
};//b1001
function Person(name,age,gender){
return {
name:name,
age:age,
gender:gender,
sayName:sayName
}
}
var p1 = Person('terry',12,'male');
var p2 = Person('larry',18,'female');
2.构造函数模式
优点:可以批量创建对象、可以区分种类
缺点:方法冗余
var sayName = function(){
console.log(this.name)
}
function Person(name,age,gender){
this.name = name;
this.age = age;
this.gender = gender;
this.sayName = sayName;
}
var p1 = new Person('terry',12,'male');
var p2 = new Person('larry',18,'female');
3.原型模式 (不单独使用) 构造函数不做任何处理
将实例所有属性和方法全部写在原型对象中
优点:可以区分种类 可以批量创建对象 方法不冗余
缺点:所有实例方法和属性一样
function Person(){};
Person.prototype.name = 'lisi';
Person.prototype.age = 12;
Person.prototype.gender = 'male';
Person.prototype.sayName = function(){
console.log(this.name);
};
Person.prototype.firends = [];
var p1 = new Person();
var p2 = new Person();
console.log(p1,p2);
console.log(p1.name,p2.name,p1.sayName(),p2.sayName());
p1.firends.push('tom');
console.log(p1.firends,p2.firends);
组合模式
将实例私有属性和私有方法放在构造函数中
将公共方法和属性放在原型对象中
function Person(name,age,gender,weight){
//私有属性
this.name=name;
this.age=age;
this.gender=gender;
//私有方法
this.weight=function(){
console.log(weight)
}
}
//公共方法
Person.prototype={
//改变原型对象
constructor:Person,
sayName:function(){
console.log(this.name)
},
type:'person实例'
}
const p1 = new Person('zhangsan',20,'男','50kg')
const p2 = new Person ('xiaohua',18,'女','40kg')