组件是对面向对象的加深应用(开发UI组件,功能组件)将 配置参数、方法、事件,三者进行分离
window.onload = function() {
    var aBtn = document.getElementsByTagName('input');

    //显示在中间,用默认参数即可
    aBtn[0].onclick = function() {
        //alert(1);
        var d1 = new Dialog();
        d1.init({ //配置参数
            iNow: 0,
            title: '登陆框'
        });
    }

    //显示在右下角的公告栏
    aBtn[1].onclick = function() {

        var d1 = new Dialog();
        d1.init({ //配置参数
            iNow: 1,
            w: 100,
            h: 400,
            dir: 'right_bottom',
            title: '公告框'
        });
    }

    //显示在中间,并且有遮罩
    aBtn[2].onclick = function() {

        var d1 = new Dialog();
        d1.init({ //配置参数
            iNow: 2,
            w: 400,
            h: 400,
            dir: 'center',
            title: '遮罩框',
            mask: true
        });
    }

}

function Dialog() { //构造函数
    this.oDiv = null;
    this.omask = null;
    this.setting = { //默认参数
        w: 300,
        h: 300,
        dir: 'center',
        title: '',
        mask: false
    }

}

Dialog.prototype.json = {

}//传入json,函数接受一个参数

function extend(obj1, obj2) { //配置参数方法
    for(var i in obj2) {
        obj1[i] = obj2[i];
    }
}

Dialog.prototype.init = function(opt) { //构建方法
    extend(this.setting, opt);//替换默认参数

    if(this.json[opt.iNow] == undefined) {
        this.json[opt.iNow] = true;
    }

    if(this.json[opt.iNow]) {
        this.create();
        this.setData();
        this.close();

        if(this.setting.mask) {
            this.mask();
        }
        this.json[opt.iNow] = false;
    }

}

Dialog.prototype.create = function() { //构建方法实现创建节点
    this.oDiv = document.createElement('div');
    this.oDiv.className = 'login';
    this.oDiv.innerHTML = '<div class="title"><span>' + this.setting.title + '</span><span class="close">X</span></div><div class="content">内容</div>';
    document.body.appendChild(this.oDiv);
}

Dialog.prototype.setData = function() { //构建方法设置配置参数
    this.oDiv.style.width = this.setting.w + 'px';
    this.oDiv.style.height = this.setting.h + 'px';
    if(this.setting.dir == 'center') {

        this.oDiv.style.left = (viewWidth() - this.oDiv.offsetWidth) / 2 + 'px';
        this.oDiv.style.top = (viewHeight() - this.oDiv.offsetHeight) / 2 + 'px';
    } else if(this.setting.dir == 'right_bottom') {
        this.oDiv.style.left = (viewWidth() - this.oDiv.offsetWidth) + 'px';
        this.oDiv.style.top = (viewHeight() - this.oDiv.offsetHeight) + 'px';
    }
}

Dialog.prototype.close = function() { //构建方法:关闭弹窗
    var _this = this;
    var oClose = this.oDiv.getElementsByTagName('span')[1];
    oClose.onclick = function() {
        document.body.removeChild(_this.oDiv);
        if(_this.setting.mask) {
            document.body.removeChild(_this.omask);
        }
        _this.json[_this.setting.iNow] = true;

    }
}

Dialog.prototype.mask = function() {

    this.omask = document.createElement('div');
    this.omask.className = 'mask';
    document.body.appendChild(this.omask);
    this.omask.style.width = viewWidth() + 'px';
    this.omask.style.height = viewHeight() + 'px';
}

function viewWidth() {
    return document.documentElement.clientWidth;
}

function viewHeight() {
    return document.documentElement.clientHeight;
}

html:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            .login {
                border: 1px solid #d8d8d8;
                position: absolute;
                z-index: 2;
            }
            
            .login .title {
                height: 40px;
                background: #d8d8d8;
            }
            
            .login .title .close {
                float: right;
                cursor: pointer;
            }
            
            .login .content {
                background: #fff;
            }
            
            .mask {
                position: absolute;
                left: 0;
                top: 0;
                z-index: 1;
                background: rgba(0, 0, 0, 0.6);
            }
        </style>
        <script type="text/javascript" src="js/myAlert.js"></script>
    </head>
    <body>
        <input type="button" name="" id="" value="登陆框" />
        <input type="button" name="" id="" value="公告框" />
        <input type="button" name="" id="" value="遮罩框" />
        <!--<div class="login">
            <div class="title">
                <span>登陆框</span>
                <span class="close">X</span>
            </div>
            <div class="content">
                内容
            </div>
        </div>-->
        <!--<div class="mask"></div>-->
    </body>

</html>