web前端全系列 教程
1839个小节阅读:2244.1k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
这种设计模式的思想是确保⼀个类只有唯⼀实例,⼀般⽤于全局缓存,⽐如全局window,唯⼀登录浮窗等。采⽤闭包的⽅式实现如下
在JavaScript⾥,实现单例的⽅式有很多种,其中最简单的⼀个⽅式是使⽤对象字⾯量的⽅法,其字⾯量⾥可以包含⼤量的属性和⽅法:
xxxxxxxxxx
71var mySingleton = {
2 property1: "something",
3 property2: "something else",
4 method1: function () {
5 console.log('hello world');
6 }
7};
x1var single = (function () {
2 let instance;
3
4 function getInstance() {
5 // 如果该实例存在,则直接返回,否则就对其实例化
6 if (instance === undefined) {
7 instance = new Construct();
8 }
9 return instance
10 }
11 function Construct() {
12 // ... ⽣成单例的构造函数的代码
13 return{
14 name:"iwen",
15 getName(){
16 return this.name;
17 }
18 }
19 }
20 return {
21 getInstance: getInstance
22 }
23})();
24
25console.log(single.getInstance().getName());
xxxxxxxxxx
361<!DOCTYPE html>
2<html lang="en">
3<body>
4 <button id="btn">登录</button>
5</body>
6<script>
7 class Login {
8 createLayout() {
9 var oDiv = document.createElement('div')
10 oDiv.innerHTML = '我是登录框'
11 document.body.appendChild(oDiv)
12 oDiv.style.display = 'none'
13 return oDiv
14 }
15 }
16 class Single {
17 getSingle(fn) {
18 var result;
19 return function() {
20 return result || (result = fn.apply(this, arguments))
21 }
22 }
23 }
24 var oBtn = document.getElementById('btn')
25 var single = new Single()
26 var login = new Login()
27 // 由于闭包,createLoginLayer对result的引⽤,所以当single.getSingle函数执⾏完之后,内存中并不会销毁result。
28 // 当第⼆次以后点击按钮,根据createLoginLayer函数的作⽤域链中已经包含了result,所以直接返回result
29 var createLoginLayer = single.getSingle(login.createLayout)
30 oBtn.onclick = function() {
31 var layout = createLoginLayer()
32 layout.style.display = 'block'
33 }
34</script>
35
36</html>