<!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>
1-單例模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.