【js进阶】设计模式之单例模式的几种声明方式

news/2025/1/20 17:17:48/

单例模式,简言之就是一个类无论实例化多少次,最终都是同一个对象

原生js的几个辅助方式的实现

  • 手写forEch,map,filter
Array.prototype.MyForEach = function (callback) {for (let i = 0; i < this.length; i++) {callback(this[i], i, this);}
};const arr = [1, 2, 3];
arr.MyForEach((item, index, arr) => {console.log(item);console.log(index);console.log(arr);
});Array.prototype.MyFilter = function (callback) {const result = [];for (let i = 0; i < this.length; i++) {if (callback(this[i], i, this)) {result.push(this[i]);}}return result;
};const arr2 = [1, 2, 3, 5, 6, 7];
console.log(arr2.MyFilter((item) => item > 3));
console.log(arr2.MyFilter((item) => item < 5));Array.prototype.MyMap = function (callback) {const result = [];for (let i = 0; i < this.length; i++) {result.push(callback(this[i], i, this));}return result;
};console.log(arr2.MyMap((item) => item * 2));

在这里插入图片描述

基础单例模式

// 单体模式,
var SingleTon = {a1: true,a2: 10,method1() {console.log('单体模式1');},method2() {console.log('单体模式2');},
};SingleTon.a1 = false;
let total = SingleTon.a2 + 5;
let result = SingleTon.method1();// 全局命名空间
let GiantCorp = {};
GiantCorp.Common = {};
GiantCorp.ErrorCodes = {};
GiantCorp.PahgeHandler = {};// 私有成员,一是相互约定用下划线标注
GiantCorp.DataParse = {// 私有属性_name: '张三',// 私有方法_getName() {return this._name;},// 公有方法getUsername(nickname) {return this._getName() + nickname;},
};

改进版单例

let MyNamespace = {};
// 使用闭包封装私有变量
MyNamespace.SingleTon = (function () {let arr = ['张三', '李四', '王五'];return {name: '续航',age: 18,getName() {return this.name;},getAge() {return this.age;},getAllUserName() {return arr.join(',');},};
})();console.log(MyNamespace.SingleTon.getName());
console.log(MyNamespace.SingleTon.getAge());
console.log(MyNamespace.SingleTon.getAllUserName());

高阶版单例

// 惰性单体
let MyNamespace = {};
// 使用闭包封装私有变量
MyNamespace.SingleTon = (function () {let singleTon = null;function constructor() {let arr = ['张三', '李四', '王五'];return {name: '续航',age: 18,getName() {return this.name;},getAge() {return this.age;},getAllUserName() {return arr.join(',');},};}return {getInstance() {if (!singleTon) {singleTon = constructor(); // 创建实例对象,并将其赋值给私有变量}return singleTon; // 返回实例对象(单例模式},};
})();
console.log(MyNamespace.SingleTon.getInstance().getName());
console.log(MyNamespace.SingleTon.getInstance().getAllUserName());

案例

let simpleXhrFactory = (function () {let standard = {createXHRObject() {return new XMLHttpRequest();},};let activexOld = {createXHRObject() {return new ActiveXObject('Microsoft.XMLHTTP');},};let activeXNew = {createXHRObject() {return new ActiveXObject('MSXML2.XMLHTTP');},};let xhr = null;try {xhr = standard.createXHRObject();return xhr;} catch (e) {try {xhr = activeXNew.createXHRObject();return xhr;} catch (e) {try {xhr = activeXOld.createXHRObject();} catch (error) {throw new Error('不支持的浏览器');}}}return xhr;
})();

http://www.ppmy.cn/news/1564711.html

相关文章

【24】Word:小郑-准考证❗

目录 题目 准考证.docx 邮件合并-指定考生生成准考证 Word.docx 表格内容居中表格整体相较于页面居中 考试时一定要做一问保存一问❗ 题目 准考证.docx 插入→表格→将文本转换成表格→✔制表符→确定选中第一列→单击右键→在第一列的右侧插入列→布局→合并单元格&#…

考研数据结构线性表之顺序表

第二章线性表 1.1线性表的定义和基本操作 定义&#xff1a;线性表时具有\textcolor{blue}{相同数据类型}的n&#xff08;n≥0&#xff09;个数据元素的\textcolor{blue}{有限序列}&#xff0c;其中n为表长&#xff0c;当n0时线性表是一个空表。若用L命名线性表&#xff0c;则其…

CC工具箱使用指南:【Excel点集转面要素(批量)】

一、简介 群友定制工具。 此工具的功能是将一系列Excel文件转成面要素。 假设文件夹下有许多Excel文件&#xff1a; Excel文件长这样&#xff1a; 工具取x,y列&#xff0c;转成点集并生成面要素&#xff0c;同时将Excel文件名作为一个字段保存下来。 二、工具参数介绍 点击…

网络安全(渗透)

目录 名词解释 2、相互关系 3. 安全影响 名词解释 1、poc、exp、payload与shellcode POC&#xff08;Proof of Concept&#xff09;&#xff1a; 是一种概念验证代码或演示程序&#xff0c;用于证明漏洞的存在。 主要目的是通过简单的代码或操作向安全研究人员、开发人员…

ESP32学习笔记_FreeRTOS(7)——Stream and Message

摘要(From AI): 本文介绍了 FreeRTOS 中的流缓冲区&#xff08;Stream Buffer&#xff09;和消息缓冲区&#xff08;Message Buffer&#xff09;的使用&#xff0c;重点讲解了它们在任务间数据传输中的应用。流缓冲区适用于实时数据流的传输&#xff0c;支持单一写入者和读取者…

深度学习基础--LSTM学习笔记(李沐《动手学习深度学习》)

前言 LSTM是RNN模型的升级版&#xff0c;神经网络模型较为复杂&#xff0c;这里是学习笔记的记录&#xff1b;LSTM比较复杂&#xff0c;可以先看&#xff1a; 深度学习基础–一文搞懂RNN 深度学习基础–GRU学习笔记(李沐《动手学习深度学习》) RNN&#xff1a;RNN讲解参考&am…

iOS - Objective-C 底层实现中的哈希表

1. 关联对象存储&#xff08;AssociationsHashMap&#xff09; // 关联对象的哈希表实现 typedef DenseMap<const void *, ObjcAssociation> ObjectAssociationMap; typedef DenseMap<DisguisedPtr<objc_object>, ObjectAssociationMap> AssociationsHashMa…

【React学习笔记】第三章:React应用

1.使用create-react-app创建 react 应用 1.1 react 脚手架 react提供了一个用于创建 react 项目的脚手架&#xff1a;create-react-app 项目的整体技术架构为&#xff1a;react webpack es6 eslint 1.2 创建项目并启动 打开CMD 第一步&#xff1a; 全局安装react脚手架 …