首页 > 其他分享 >前端_js设计模式

前端_js设计模式

时间:2022-12-12 12:55:34浏览次数:46  
标签:Popup show 前端 js instance let 单例 设计模式

什么是设计模式

1. 什么是设计模式

  • 设计模式是前人总结出的,解决开发中某类问题的方法

  • 我们在过去的代码编写中已经接触过很多的设计模式了,只不过当时咱们不知道这就是一种设计模式而已;

  • 设计模式之间并不是互相独立的,往往一个功能需要多个设计模式的配合实现;

  • 每个设计模式所解决的问题肯定是不同的,根据这些模式的功能我们可以将他们分成很多几大类:创建型设计模式、结构型设计模式、行为型设计模式。当然在JavaScript里面还可以有其他的一些特殊的设计模式,我们也会介绍到。

1. 单例模式

单例模式(Singleton):确保某一个类只有一个实例。

JavaScript创建实例对象的方法有很多,所以很多写法我们都可以认为是单例模式:

/*
    上面做法在没有调用时就已经初始化DOM节点了,
    很显然,当我们使用时再初始化这样更好
    改良一下:
*/
let Popup = (function () {
    let instance;
    return function () {
        if (!instance) {
            instance = document.createElement("div");
        }
        instance.show = function (arg) {
            this.innerText = arg;
            document.body.appendChild(this);
        };
        return instance;
    };
})();
Popup().show("popup1");//测试使用1
Popup().show("popup2");//测试使用2
console.log(Popup() === Popup());//测试单例
/*
    抽象化一下,写成类的形式:
*/
let Popup = (function () {
    let instance = null;
    class Pop{
        constructor(){
            if( instance ){
                return instance;
            }
            instance = this;
            this.ele = document.createElement("div");
            this.show = function (arg) {
                this.ele.innerText = arg;
                document.body.appendChild(this.ele);
            };
        }
    }
    return Pop;
})();
let a = new Popup();
a.show("popup1");//测试使用1
let b = new Popup();
b.show("popup2");//测试使用2
console.log(a === b);//测试单例
//核心实现代码
let Single = (function(){
    let instance = null;
    class S{
        constructor(){
            if(instance){
                return instance;
            }
            instance = this;
            //code……
        }
    }
})();
//实例化测试
console.log( new Single() === new Single() );

**总结:**当需求实例唯一、命名空间时,就可以使用单例模式。结合闭包特性,用途广泛

 

标签:Popup,show,前端,js,instance,let,单例,设计模式
From: https://www.cnblogs.com/Aquakinn/p/16975752.html

相关文章

  • webgl(three.js)实现室内三维定位,3D定位,3D楼宇bim、实时定位三维可视化解决方案——
    使用three.js(webgl)搭建智慧楼宇、3D定位、三维室内定位、设备检测、数字孪生、物联网3D、物业3D监控、物业基础设施可视化运维、3d建筑,3d消防,消防演......
  • JS知识点梳理之作用域、作用域链、柯里化、闭包
    一、作用域与作用域链作用域是指js变量使用时所存在的一个区域,分为全局作用域(window)和局部作用域(function、setTimeout...等都会产生局部作用域)。当局部作用域变量名与......
  • 细说js变量、作用域和垃圾回收
    基本类型和引用类型在JavaScript中,数据类型可分为基本类型和引用类型,基本类型有六种:Null,Undefined,String,Boolean,Number,Symbol;而引用类型就是传说中的Object了。......
  • 细说Js中的this
    为什么使用this先看个例子:functionidentity(){returnthis.name.toUpperCase();}functionspeak(){return"Hello,i'm"+identity.call(this);}va......
  • Node.js Event Loop 的三大常见理解误区和正确概念辨析
    Node.jsEventloop监控器。高的frequency和低的持续时间是最理想的eventloop状态。上图显示三点半到五点半之间,eventloop的frequency骤降,然后duration居高不......
  • 什么是json以及json的表达形式?
    1、什么是json? JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式. 2、json有哪几种结构? (1)“名称/值”对的集合 不同的语言中,表述为:对象(object),......
  • js之ajax |12-6
    AJAX不是JavaScript的规范,它只是一个哥们“发明”的缩写:AsynchronousJavaScriptandXML,意思就是用JavaScript执行异步网络请求。如果仔细观察一个Form的提交,你就会发现,一......
  • 说说Nodejs高并发的原理
    导读ALLTHETIME,我们写的的大部分javascript代码都是在浏览器环境下编译运行的,因此可能我们对浏览器的事件循环机制了解比Node.JS的事件循环更深入一些,但是最近写开始深......
  • 细说nodejs的path模块
    前言path模块是nodejs中用于处理文件/目录路径的一个内置模块,可以看作是一个工具箱,提供诸多方法供我们使用,当然都是和路径处理有关的。同时在前端开发中path模块出现......
  • 9 年小厂老前端的年终总结
    前言时光飞逝,岁月如梭,转眼来到2021年底,这一年少了些理性,多了点感性,少了些自由,多了一份责任,这一年视乎没做什么事情,但又过得非常充实,最欣慰的是回家有个人等待着我的拥抱,最......