![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3f48b62fec087c00dd54efac09dd15d8.jpeg)
一.单例模式的实际案例
<div></div>
<p></p>
<script>
class SetStyle{
constructor(ele,type){
this.ele = ele;
this.type = type;
}
setCss(){
for(let key in this.type){
this.ele.style[key] = this.type[key];
}
}
}
const oDiv = document.querySelector('div');
const oP = document.querySelector('p');
const divStyle = new SetStyle( oDiv , {width:'100px',height:'200px',background:'red'} );
divStyle.setCss();
const pStyle = new SetStyle( oP , {width:'200px',height:'100px',background:'blue'} )
pStyle.setCss();
console.log(divStyle === pStyle);
</script>
二.demo
<div></div>
<p></p>
<span></span>
<script>
const utils = (function () {
class SetStyle {
setCss(ele , type) {
for (let key in type) {
ele.style[key] = type[key];
}
}
}
let obj = null;
return function () {
if (obj === null) {
obj = new SetStyle();
}
return obj;
}
})();
const oDiv = document.querySelector('div');
const oP = document.querySelector('p');
const oSpan = document.querySelector('span');
*************法1***********
const divStyle = utils();
const pStyle = utils();
const spanStyle = utils();
console.log(divStyle , pStyle , spanStyle);
console.log(divStyle === pStyle);
console.log(pStyle === spanStyle);
console.log(divStyle === spanStyle);
divStyle.setCss( oDiv , {width:'100px',height:'200px',background:'red'} );
pStyle.setCss( oP , {width:'200px',height:'100px',background:'blue'} );
spanStyle.setCss( oSpan , {width:'100px',height:'100px',background:'pink',display:'block'} );
*************法2*************
const eleStyle = utils();
eleStyle.setCss( oP , {width:'200px',height:'100px',background:'blue'} );
eleStyle.setCss( oSpan , {width:'100px',height:'100px',background:'pink',display:'block'} );
eleStyle.setCss( oDiv , {width:'100px',height:'200px',background:'red'} );
总结:
核心思想:
同一个构造函数,生成的实例化对象,是同一个实例化对象
不会重复生成新的实例化对象
防止占用过多的内存空间,造成执行效率变低
核心原理:
定义一个变量,存储构造函数生成的实例化对象
如果 变量 中存储的是原始数值
证明没有通过构造函数,生成过实例化对象
可以 第一次执行 构造函数 生成实例化对象
如果 变量 中存储的不是原始数值
不再调用 构造函数 生成新的实例化对象
直接返回变量,也就是返回实例化对象的地址
实际操作:
定义一个立即执行函数
定义 构造函数
构造函数,不定义属性和属性值
在调用方法时,输入参数数值
定义 变量 赋值原始数值
立即执行函数,返回值 是另一个函数
另一个函数
判断: 如果 变量是原始数值
调用 构造函数,生成实例化对象,赋值给变量存储
如果 变量不是原始数值
什么操作都不执行,直接返回 变量
执行结果:
不是直接使用 构造函数生成实例化对象
而是通过 定义的 函数来执行生成 实例化对象
生成的所有内容,存储的都是相同的实例化对象的内存地址
通过调用 方法, 输入不同的数据参数 实现不同的代码效果
核心内容:
闭包 --- 为了防止全局变量污染
构造函数 --- 面向对象的编程方式
构造函数的方法 --- 输入不同参数,实现不同的代码效果
判断 --- 为了防止重复生成冗余的实例化对象
</script>