构造函数模式--Constructor
核心
1.将属性绑到this上 2.将方法绑到到prototype上 3.使用new来新增实例【创建不同的引用类型】
function People(){
this.name='李顺心'
}
People.prototype.walk =function(){
console.log('walk')
}
let xiannv = new People()
工厂模式
核心
1.return一个对象 2.创建不同的引用类型
function createPerson(){
let person={
name:'人',
walk:function(){
console.log('walk')
}
}
return person//返回一个对象
}
let xiannv = createPerson()//工厂生产对象
单例模式---simble
核心
1、生产一个类的唯一实习 2.节约内存
function createPeople(){
let name
return function(userName){
return name||{name =userName}
}
}
let single =createPeple()
console.log(single('李顺心'))//不管再传递任何值 只会返回李顺心
模块模式
核心
常常使用闭包的形式来实现
let Person = (function () {
let name = '小明'
function sayName() {
console.log(name)
}
return {
name: name,
sayName: sayName
}
})()
发布订阅模式---Publish/Subscribe
核心
`
let EventCenter = (function () {
let events = {}
function on(evt, handler) {
// 实现监听效果
// 使用'或'是为了可以对同一个事件多次进行回调
events[evt] = events[evt] || []
events[evt].push({
handler: handler
})
}
function fire(evt, args) {
if (!events[evt]) {
// 如果未监听任何事件,直接中断
return
}
for (let i = 0; i < events[evt].length; i++) {
// 遍历,实现对同一个事件的多次回调
events[evt][i].handler(args)
}
}
function off(name) {
delete events[name]
}
return {
on: on, // 订阅者
fire: fire, // 发布者
off: off // 取消订阅
}
})()
EventCenter.on('hello', function (num) {
console.log(num)
})
EventCenter.on('hello', function (num) {
console.log(num)
})
EventCenter.fire('hello', 1) // 1[出现两次]