单例模式 和 高级单例模式

445 阅读1分钟
// var name = '小明';
    // var age = 10;
    // var sex = '男';

    //  单例模式,其实就是一个对象,我们把这个对象称为 命名空间
    var per1 = {
        name:'小明',
        age:10,
        sex:'男',
        eat:function(){
            console.log(`${this.name}吃饭`)
        }
    }
    var per2 = {
        name:'小明1',
        age:12,
        sex:'女'
    }
    per1.eat();
    var f = per1.eat;
    f();

    var tools = {
        f1:function(){

        },
        f2:function(){

        },
        f3(){
            console.log(666)
        }
    };
    tools.f3();
    ```
    普通单例,是没有私有的内容,别的人员可以任意更改你的内部属性 
    
    
    
    高级单例模式
    
      var utils = function(){
        var name = '小明';
        var sex = '男';
        var age = 10;
        var eat = function(){
            console.log(`${name}吃饭`)
        }
        return{
            name,sex,age,eat
        }
    }
    var per3 = utils(); // per3 仍然是个普通对象
    per1.name = '小红'
    per1.eat = function(){
        console.log('吃水果')
    }
    per1.eat(); // 普通单例,是没有私有的内容,别的人员可以任意更改你的内部属性 


    per3.name = '小红';  //只是修改了per3这个对象中的name属性,utils中的内部变量没有改变
    var per4 = utils(); 
    console.log(per3.name,per4.name)


    //console.log(per3.name,per1.name)
    //  per1 的name属性 用的人能否更改???
    //  per3 的name属性 用的人能否更改???
    //  都是可以更改的,但是per3中name对应的变量是修改不了的;
    //  用的人每次都会重新执行该高级单例,每次获取的都是初始值
</script>
<script src="./utils.js"></script>
<script>
    var myU1 = utils();
    myU1.a = 100;
    console.log(myU1.a)
    myU1.fn()
    
    
    高级单例模式,可以说就是升级版的单例模式,更改了单例模式的不足,用到高级单例模式
    使用这个单例的模式 是改变不了内部变量的。