单例模式
单例模式也称作为单子模式,单体模式。单例模式的定义是产生一个类的唯一实例,是软件设计中较为简单但是很常用的一种设计模式。
单例模式的核心是确保只有一个实例,并提供全局访问
工厂模式
把实现同一件事情的相同代码放到同一个函数中,以后如果再想实现这个功能,只需要调用这个函数就可以了,提高代码的重复利用率
function createFactory(name, age) {
let obj = {};
obj.name = name;
obj.age = age;
obj.write = function () {
console.log(name, age);
}
return obj;
}
let p1 = createFactory('小光', 18);
p1.write();
let p2 = createFactory('小花', 20);
p2.write();
构造函数模式
浏览器会默认创建一个当前实例的对象
// 构造函数模式 实例识别
function createPerson(name, age) {
// 浏览器默认创建的对象就是我们的实例
console.log(this)
this.name = name;
this.age = age;
this.write = function() {
console.log(name, age);
}
}
let p1 = new createPerson('小光', 18);
p1.write();
let p2 = new createPerson('小花', 20);
p2.write();
原型链模式
基于构造函数模式的原型模式解决了方法或属性共有的问题 -> 把实例之间相同的属性和方法提取成公有的属性和方法 -> 想让谁公有就放在prototype上即可
- 1、每一个函数数据类型(普通函数、类)都有一个天生自带的属性:prototype(原型),并且这个属性是一个对象数据类型的值
- 2、并且在prototype上浏览器天生给他加了一个属性constructor(构造函数),属性值是当前函数(类)本身
- 3、每一个对象数据类型(普通对象、实例、prototype …)也天生自带一个属性:proto,属性值是当前实例所属类的原型
- 4、Object是js中所有对象数据类型的基类(最顶层的类)
- 5、在Object.prototype上没有__proto__这个属性
function createPerson(name, age) {
this.name = name;
this.age = age;
}
createPerson.prototype.write = function () {
console.log(this);
console.log(this.name, this.age);
}
let p1 = new createPerson("小光", 18);
p1.write();
let p2 = new createPerson("小花", 20);
p2.write();
console.log(p1.write === p2.write); // true