zoukankan      html  css  js  c++  java
  • 浅谈js单例模式

    单例模式就是在系统中保存一个实例,就是一个全局变量,在团队开发中,为了实现一些相似的功能,比如不同页面之间的表单验证,可能需求是不一样的,但是呢命名可能一样,这时就会产生冲突,这时候单例模式就能很好的解决这个问题。

    首先说说它的优点:

    1,单例模式声明一个命名空间,它生成一个唯一的全局变量,一个命名空间,可以用声明对象的方式来声明:

    var mapleTao={ name:"mapleTao",init:function(){console.log(this.name)}};

    有木有发现这个和对象有点类似呢,其实name,init是它的属性,通过mapleTao.name就获取它name的值,通过mapleTao.init()就可以调用init方法,这样在哎处理多需求页面,多人开发时就能很好的解决命名冲突的问题,以及可以更好的维护代码,更好的控制代码。

    2,单例模式在全局中只声明一个变量,大家都知道在js中,假设你写了一个方法,如 function aa(){},这样就会在window中生成一个叫aa的变量,当实现一个功能时,在代码封装中,会创建好多函数,好多function,这样就会在window中创建好多变量,会占用更多的内存单元,全局变量的作用域很广,在众多处理函数中都可能改变,这样当出现bug时不容易快速找到,而通过单例模式创建的对象变量中可以更快速的找到问题,从而解决,这大大减少的问题修复的时间以及系统加载的时间。

    3.在实现同一个功能的地方比通过new新创建对象对内存对资源的占用更据优势。

    上述是它的一些优点,当然既然有优点缺点也是必不可少的。

    1,它的扩展性不好,对一个单例对象里面的方法重写时会破坏原有的需求,就如上述中的init,如果你写下如下代码 mapleTao.init=function(){console.log(1)};那么init方法就会把原有的方法替换,从而改变了该方法的实现,会破坏它的功能。

    2,灵活性不好, 当某个需要实现该功能的需求需要变动时,而其他的又不需要变动时,单例对象就不好处理了。

    3,在js中对象的存储有一个较大的问题,对象是存储在内存中的一块中,一个对象在内存中可能是一串2b4c6rr,一串地址,如下代码,

    var a={name:"maple"};

    var b=a;

    console.log(a.name); //maple

    b.name="mapleTao";

    console.log(a.name);//mapleTao

    从这就可以改变b是等于a的,它们的存储地址一样,当改变b中的属性值时,你在去访问a时,它也会去找这个地址,虽然并没有对a这个对象进行操作,但地址里面的东西改变了,从而你去访问时也就被动的改变了,这个在项目中经常会出现问题。这就说明当一个单例对象创建完成时,他是不能随意改的。这也是它的局限性。

    综合上述,单例模式是一把双刃剑,它既有好处也有坏处,如果使用,则要取决于需求。

    以上纯属个人观点,如有更好的建议,欢迎灌水。

  • 相关阅读:
    L7-1 文本处理
    L6-14 继承多态
    L6-13 魔法方法
    L6-12 类的实例
    L6-11 综合运用
    L6-2 嵌套循环
    golang 关于引用类型
    golang close for channel
    go tip
    vscode官方文档
  • 原文地址:https://www.cnblogs.com/mapletao/p/6012240.html
Copyright © 2011-2022 走看看