单例设计模式

// 创建div
    var createWindow = function (param) {
        var div = document.createElement("div");
        div.innerHTML = "我是弹窗内容" + param[0];
        div.style.display = 'none';
        document.body.appendChild(div);
        return div;
    };
    // 创建iframe
    var createIframe = function () {
        var iframe = document.createElement("iframe");
        document.body.appendChild(iframe);
        return iframe;
    };

    /*
    我们使用一个参数fn传递进去,如果有result这个实例的话,直接返回,否则的话
    ,当前的getInstance函数调用fn这个函数,是this指针指向与这个fn这个函数;
    之后返回被保存在result里面;现在我们可以传递一个函数进去,不管他是创建div也好,还是创建iframe也好,
    总之如果是这种的话,都可以使用getInstance来获取他们的实例对象;
    */

    // 获取实例的封装代码
    var getInstance = function (fn) {
        var result;
        return function () {
            return result || (result = fn.call(this, arguments));
        }
    };
    // 测试创建div
    var createSingleDiv = getInstance(createWindow);
    document.getElementById("testId1").onclick = function () {
        var win = createSingleDiv('1');
        win.style.display = "block";
    };
    // 测试创建iframe
    var createSingleIframe = getInstance(createIframe);
    document.getElementById("testId2").onclick = function () {
        var win = createSingleIframe();
        win.src = "http://cnblogs.com";
    };

 

posted @ 2019-05-15 09:21  chengdu.jack.li  阅读(78)  评论(0)    收藏  举报