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

devtools/2025/1/21 5:41:53/

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

原生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/devtools/152278.html

相关文章

Jenkins-pipeline语法说明

一. 简述&#xff1a; Jenkins Pipeline 是一种持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;它允许用户通过代码定义构建、测试和部署流程。 二. 关于jenkinsfile&#xff1a; 1. Sections部分&#xff1a; Pipeline里的Sections通常包含一个或多个Direc…

[LeetCode] 哈希表 I — 242#有效的字母异位词 | 349#两个数组的交集 | 202#快乐数 | 1#两数之和

哈希表 基础知识常见的哈希结构数组242# 有效的字母异位词 Set基础语句349# 两个数组的交集202# 快乐数 Map基础语句1# 两数之和 基础知识 哈希表常用于快速判断一个元素是否在集合中&#xff0c;空间换时间 哈希表是根据key&#xff08;如数组的索引下标&#xff09;直接进行…

算法随笔_12:最短无序子数组

上一篇: 算法随笔_11: 字符串的排列-CSDN博客 题目描述如下: 给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。请你找出符合题意的最短子数组&#xff0c;并输出它的长度。…

Cursor的composer和chat的区别

Cursor 提供了两种人机对话方式。一种是 Chat&#xff0c;它与 ChatGPT 之类的工具差别不大。另一种则是强大的 Compose。 一、长文本及程序文件处理方面 Composer 在处理长文本时表现较为稳定&#xff0c;可以对长文进行更改而不会出现内容丢失的情况。而 Chat 在更改长的程…

设计模式-结构型-装饰器模式

装饰器模式&#xff08;Decorator Pattern&#xff09;是结构型设计模式中的一种&#xff0c;它允许你通过将对象封装在一个新的对象中&#xff0c;来动态地添加新的功能&#xff0c;而无需改变原对象的结构。装饰器模式的核心思想是“将功能附加到对象上”&#xff0c;它是一种…

解决npm install安装出现packages are looking for funding run `npm fund` for details问题

当我们运行npm install时&#xff0c;可能会收到类似以下的提示信息&#xff1a;“x packages are looking for funding.” 这并不是错误提示&#xff0c;也不会影响项目的正常运行。其实实在提醒有一些软件包正在寻求资金支持。 根据提示输入npm fund可以查看详细的信息&#…

java 设计模式 工厂模式

什么是工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过定义一个接口或抽象类来创建对象&#xff0c;但由子类决定具体实例化哪个类。简单来说&#xff0c;工厂模式将对象的实例化过程封装起来&#xff0c;客户端通过工厂方法…

ospf收敛特性及其他的小特性

1. 收敛特性 快速收敛&#xff1a;   只第一次计算时计算全部节点Full SPF   增量最短路径优先算法I-SPF&#xff08;Incremental&#xff09;    只对受影响的节点进行路由计算   全部路由计算PRC    只对发生变化的路由进行重新计算;    根据I-SPF 算出来的SPT …