单例模式及案例

<script>
//    function Car(){

//    }
//    var c1 = new Car();
//    var c2 = new Car();
//    alert(c1==c2);//false
   //怎样能使输出结果为true———>单例模式:单例模式思想:在构造函数中将第一次new出来的对象存放在一个变量中,然后返回这个
   //变量继续new变量时,判断这个变量中是否有值,如果有就返回。
//    var c = null;
//    function Car(){
//       if(c){//c中存放的是第一次new出来的对象
//           return c;
//       }
//       c = this;//this指new出来的对象,此处指c1;
//       return c;
//     }
//     var c1 = new Car();
//     var c2 = new Car();
//     alert(c1==c2);//ture
//解决上面全局变量c的问题:
//    function Car(){
//       if(Car.c){//在构造函数内部可以使用构造函数.属性或构造函数.方法定义静态属性或静态方法,静态属性和静态方法
//       //直接使用构造函数.属性或构造函数.方法调用。
//           return Car.c;
//       }
//       Car.c = this;
//       return Car.c;
//     }
//     var c1 = new Car();
//     var c2 = new Car();
//     alert(c1==c2);//ture
//简化代码:
    // function Car(){
    //   if(!Car.c){//在构造函数内部可以使用构造函数.属性或构造函数.方法定义静态属性或静态方法,静态属性和静态方法
    //   //直接使用构造函数.属性或构造函数.方法调用。
    //      Car.c = this;
    //   }
    //   return Car.c;
    // }
    // var c1 = new Car();
    // var c2 = new Car();
    // alert(c1==c2);//ture
//小案例:
    function Car(){
      if(!Car.c){
         Car.c = {
             name:"Audi ",
             price:200000000,
             functions:function(){
                console.log( name+"comfort");
             }
         }
      }
      return Car.c;
    }
    var c1 = new Car();
    var c2 = new Car();
    console.log(c1,c2);
</script>

应用-->显示登录的弹出框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>单例实现登录弹窗</title>
    <style>
        
        .login-layer {
            width: 200px;
            height: 200px;
            background-color: rgba(0, 0, 0, .6);
            text-align: center;
            line-height: 200px;
            display: inline-block;
            position: absolute;
            left: 50%;
            top: 50%;
            margin-left: -100px;
            margin-top: -100px;
        }
    </style>
</head>
<body>
    <button id="loginBtn">显示登录的弹出框</button>
</body>
</html>
<script>
    function SingleDiv(){
        if( !SingleDiv.instance ){
            //创建对象
            SingleDiv.instance = {
                div : document.createElement("div"),
                init : function(){
                    this.div.className = "login-layer";
                    document.body.appendChild( this.div );
                    this.div.innerHTML = "我是登录框";
                }
            }
        }
        //存在后 将对象返回
        return SingleDiv.instance;
    }
    loginBtn.onclick = function(){
        new SingleDiv().init();
    }
</script>

 

posted @ 2019-02-11 20:03  kinoko-木子  阅读(130)  评论(0编辑  收藏  举报