多属性见识:
let obj = {
name:"张三",
age:18
}
/*
参数一 对象
参数二 对象的属性
*/
Object.defineProperties(obj,{
name:{
writable:true
},
age:{
}
})
obj.name = "王富贵"
console.log(obj);
设计模式 :
就是针对某一类的问题而给的专门解决方案和优化方案
/*
常见的设计有
单例模式 => vuex
组合模式
发布 订阅 => 观察者模式
*/
单例模式:
单个实例 => 单个对象 => 自始至终只能存在一个对象
// function Wife(){}
// let w1 = new Wife();
// let w2 = new Wife();
// console.log(w1 === w2);
//单例 => 只能创建一个对象
class Wife{}
//实例
let instance = undefined;
function getInstance(){
if(!instance){
instance = new Wife();
}
return instance;
}
let w1 = getInstance();
let w2 = getInstance();
console.log(w1,w2,w1 === w2);
class Wife{}
let Utils = (function(){
//定一个实例
let instance = undefined;
return function(){
if(!instance){
instance = new Wife();
}
return instance
}
})()
let u1 = Utils()
let u2 = Utils()
console.log(u1,u2,u1 === u2);
组合模式:
将多个拥有共同功能的实例对象组合在一个队列当中,一起执行
class A{
init(){
console.log("我是一个A");
}
}
class B{
init(){
console.log("我是一个B");
}
}
class C{
init(){
console.log("我是一个C");
}
}
class Comb{
constructor(){
//存储的是多个实例对象的一个数组
this.message = []
}
//将实例添加到this.message这个数组当中
add(obj){
this.message.push(obj);
}
//将this.message里面的实例对象一起调用
execute(){
this.message.forEach(item=>{
item.init();
})
}
}
//添加方法
let c = new Comb();
c.add(new A())
c.add(new B())
c.add(new C())
c.execute();