如果你想让你的代码更优雅、更易维护、更简洁,往往离不开设计模式的解决方案。在JS设计模式中,核心思想:Encapsulatechange(将变化和不变性分开,保证变化的部分是灵活的,不变的部分是稳定的)。单例模式那么让我们来谈谈第一种常见的设计模式:单例模式。单例模式保证了一个类只有一个实例,并提供了一种全局的访问方式来访问它,以解决全局使用的类频繁创建和销毁占用内存的问题。ES5中使用闭包在ES5中可以使用闭包(函数内部的return函数被外部??变量引用,使得本函数中的变量无法释放,所以内置成闭包)来保存这个类的实例.varSingeton=(function(){varinstance;functionUser(name,age){this.name=name;this.age=age;}returnfunction(name,age){if(!instance){instance=newUser(name,age)}returninstance}})()这时候一旦生成这个实例,每次都会返回这个实例,不会被修改。可以看到如下代码,最初给User对象赋值时name:alice,age:18时,后面的赋值会失效,每次返回的都是初始实例对象。ES6使用类的静态属性上面的代码是使用ES6语法实现的,通过类的静态属性保存了唯一的实例对象。classSingeton{constructor(name,age){if(!Singeton.instance){this.name=name;这个。年龄=年龄;Singeton.instance=this;}返回Singeton.instance;}}创建方法还是一样,通过new关键字创建类的实例对象。案例那么这样的设计模式在开发中的实际用途是什么呢?我们想象这样一个业务场景:访问网站时,页面已经很久没有操作了,此时授权到期。当我们点击页面任意位置时,会弹出一个登录框。那么这个登录框是全局唯一的,不会有多个副本,也不会相互冲突,所以不用每次都创建一个,保留原来的就可以了。提前创建节点我们可能会想到先在页面上提前创建节点,写好页面样式,最后通过控制元素的display属性来实现显示和隐藏的效果。
