1.JavaScript工厂模式
、优点:可以批量创建对象
缺点:创建实例无法区分种类 全部是object实例 方法冗余
var sayName = function(){
console.log(this.name)
}
function Person(name,age,gender){
return {
name:name,
age:age,
gender:gender,
sayName:sayName
}
}
var p1 = Person('张三',18,'male');
var p2 = Person('张三',18,'male');
function Aanimal(){};
2.构造函数模式
优点:可以批量创建对象 可以区分种类
缺点:方法冗余
var sayName = function(){
console.log(this.name)
}
var sayName1 = function(){
console.log(this.name)
}
function Person(name,age,gender){
new关键字做了什么事情?*************
1.创建一个Person构造函数实例 p1 p2 ....
Person{}--->p1 Person{}--->p2
2.将this指向构造函数实例 p1 p2 ....
this--->p1 this--->p2
3.执行函数体内代码
this.name--->p1.name
4.返回构造函数实例
return p1 p2 p3
this.name = name;
thi.age = age;
this.gender = gender;
this.sayName = sayName;
}
var p1 = new Person('李四',18,'female');//Person{}
var p2 = new Person('王五',28,'male');//Person{}
3.原型模式
构造函数什么都不做
将实例所有属性和方法全部写在原型对象中
优点:可以批量创建对象 可以区分种类 方法不冗余
缺点:创建实例对象全部都是一样 方法属性只能访问原型对象
function Person(){};
Person.prototype.type = '造人实例';
Person.prototype.name = 'zs';
Person.prototype.age = 18;
Person.prototype.sayName = function(){
console.log(this.name)
}
var p1 = new Person();//Person{}
var p2 = new Person();//Person{}
p1.name === p2.name;
p1.type === p2.type;
p1.age === p2.age;
p1.sayName();
p2.sayName();
4.组合模式
原型模式 + 构造函数模式
将实例公共属性和方法放在原型对象中
将实例私有属性和私有方法放在构造函数中
function Person(name,age,gender,weight){
实例私有属性
this.name = name;
this.age = age;
this.gender = gender;
实例私有方法
this.weight = function(){
console.log(weight)
}
}
Person.prototype.sayName = function(){
console.log(this.name)
};
var p1 = new Person('ls',18,'male','40kg');
p1.sayName()
5.instanceof
检测实例是否是该构造函数实例或者在原型链上
p1 instanceof Person
p1 instanceof Object
p1 instanceof Array false