1-單例模式

<!DOCTYPE html>
<html lang='en'>

<head>
    <meat charset='UTF-8'>
        <meat name='viewport' content='width=device-width, initial-scale=1.0'>
</head>

<body>
    <button id='app'>顯示單例按鈕</button>
    <button id='hide'>隱藏單例按鈕</button>

    <script>
        function func() {
            let a = 15;
            return function (num) {
                console.log(a);
                a = num;
                console.log(a);
            }
        }


        // 單例模式--始終只返回一個實例
        // let Test = (function(name) {
        //     let div;
        //     return function (name) {
        //         if (!div) {
        //             div = document.createElement('div');
        //             div.innerText = name;
        //             div.style.display = 'none';
        //             document.body.appendChild(div);
        //         }
        //         return div;
        //     }
        // })()


        function createAlert(name) {
            let div;
            if (!name) {
                throw new Error('請傳遞參數');
            }
            div = document.createElement('div');
            div.innerText = name;
            div.style.display = 'none';
            document.body.appendChild(div);
            return div;
        }

        // 封裝單例模式 --- 顯示
        function getSengle(func) {
            let result;
            let preArgs;
            return function () {
                if (!result && !preArgs) {
                    preArgs = arguments[0]
                    result = func.apply(this, arguments);
                    console.log(result)
                } else if (result && arguments[0] == 'hide') {
                    result.style.display = 'none';
                } else if (result && preArgs != arguments) { // 修改創建DOM元素的文本內容
                    result.innerText = arguments[0];
                }
                return result;
            }
        }

        let single = getSengle(createAlert);
        let hideSin = single;

        let count = 0;
        let showSengle = document.getElementById('app');
        let hideSengle = document.getElementById('hide');
        showSengle.onclick = function () {
            count++;
            let oDom = single('小明' + count);
            oDom.style.display = 'block';
        }
        hideSengle.onclick = function () {
            hideSin('hide');
        }

    </script>

</body>

</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章