单例模式

单例模式:
单例:单个实例
多次执行,只有一个对象,指,如果需要多次创建同一个对象,完成同一件事情,肯定会多次new,真的会产生多个对象,但是没必要。修改成,多次执行,只有一个对象
作用:
如果生成的实例化对象,属性,功能,方法都完全相同那么就生成的是同一个实例化对象

  1. 修改系统默认使用
function fn(){
    //   将来准备给Fn的身上添加一个属性,这个属性为对象,但是又不能每次都添加
    //   只有第一次添加,之后都不用添加
    //   判断,如果是第一次,意味着之前没有添加过,默认是undefined,如果不是第一次,意味着之前添加过,那么就是对象
        if(!fn.obj){
            fn.obj = {}
        }
        fn.obj.sayHello = "hello";
        return fn.obj;
    }
    var f1 = new fn();
    var f2 = new fn();

    console.log(f1);
    console.log(f2);
    console.log(f1 === f2);      //t
  1. 利用封装实现

```javascript
// 需要一个构造函数
        function Person(){

        }
        // 封装一个单例模式的调用方式
        var f = (function(){
            var instance;
            return function(){
                if(!instance){
                    instance = new Person();
                }
                return instance;
            }
        })();

        var p1 = f();
        var p2 = f();

        console.log(p1);
        console.log(p2);
        console.log(p1 === p2);    //t 

应用:给页面创建一个信息框,每次执行,设置新内容,(信息框只有一个,只是内容在改)

//这个构造函数的功能就是创建一个div,添加到页面上
   function Msg(){
        this.ele = document.createElement("div");
        document.body.appendChild(this.ele);
    }
    Msg.prototype.init = function(str){
        this.ele.innerHTML = str;
    }
    var singleCase = (function (){
        var instance;
        return function(text){
            if(!instance){
                instance = new Msg();
            }
            instance.init(text);
            return instance;
        }
    })();
    var n1 = singleCase("哈哈哈");       //第一次的时候,页面中会出现一个新的div,内容是哈哈哈
    var n2 = singleCase("嘿嘿嘿");       //第二次的时候,不会出现新的div,而是把原来的div变成嘿嘿嘿
    console.log(n1 === n2);      //t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值