首页 > 网站 > WEB开发 > 正文

javascript设计模式:单例模式(Singleton)

2024-04-27 15:11:12
字体:
来源:转载
供稿:网友

定义

保证一个特定类仅有一个实例。如果第二次使用同一个类创建新对象的时候,应该得到与第一次所创建对象完全相同的对象


补充知识

自执行函数

(function Fun(){ console.log('work!'); })(); // Output: work!讲解 //相当于是先 let tmp = function Fun(){ console.log('work!'); } //然后 tmp(); //Output: work!

就是把tmp换为声明的函数,省去了声明另一个变量的步奏。


arguments

ECMAScript函数中的参数在内部用一个数组来表示。函数接收的始终是这个数组,而不关系数组中所包含的参数(如果有参数的话)

function A(){ console.log(arguments); } A(1,2,3,4,5,6,7,8,9,10);

Output: 这里写图片描述


基本格式

'use strict'; let mySingleton = (function(){ //变量instance用于标记存放具体方法的init()函数是否被初始化,并在初始化后用于存放init() let instance; //方程init()内部填写具体实现方法,不希望对外暴露与修改的写在函数内部,可以被外部调用与修改的写在返回值中 function init() { //函数PRivateMethod()不可被外部调用,为私有元素 function privateMethod() { console.log('Private Method'); } //变量privateVar的值不可被外获取与修改,为私有元素 let privateVar = 'Private var'; return { //变量publicVar可被外部获取与修改 publicVar: 'Public publicVar', //函数publicFunction可被外部获取与修改 publicFunction: function() { console.log('Public Method'); } }; } return { //此函数的作用为需要使用init()中具体方法时判断其是否被初始化 getInstance: function() { if(instance === undefined){ //如果没有被初始化,则进行初始化 instance = init(); } //返回存放具体方法的init()函数 return instance; } }; })();//测试let A = mySingleton.getInstance();let B = mySingleton.getInstance();console.log(A === B); //Output: true , 说明完全相同,符合定义:指向单一对象console.log(A.publicVar); // Output: Public publicVar(可访问)A.publicFunction(); //Output: Public Method(可访问)A.privateMethod(); //Output: TypeError: A.privateMethod is not a function(不可访问)console.log(A.privateVar);//Output: undefined(不可访问)

参考与推荐阅读

深入理解javascript系列之单例模式Learning Javacript Design Patterns《Javascript模式》
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表