三、单体模式
单体模式是设计模式中最常用的一种。单体模式就是希望可以在使用方法创建对象的时候,我们无论创建多少次对象都指向同一个
1、普通创建对象方式
代码语言:javascript复制<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
function notSingle() {
return {
a: 1
}
}
var a = notSingle()
var b = notSingle()
console.log(a === b) // 打印 false
function notSingle2() {
this.a = 123
}
var a1 = new notSingle2()
var a2 = new notSingle2()
console.log(a1 === b1); // 打印 false
// 无论是使用函数,还是用构造函数的情况下,我们创建出来的对象都是相互独立的
// 在绝大多数情况下,这也是我们所期望的结果,这是没问题的
// 当在某些情况下,我们需要他们创建出来的返回的数据是已经被创建出来的对象数据,而不是再去创建出来的新的对象
</script>
</head>
<body>
</body>
</html>
2、单体模式创建对象
代码语言:javascript复制<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var _unique = null;
function createSingle() {
var obj = {
a: 1
}
if (_unique === null) {
_unique = obj
}
return _unique
}
var a = createSingle()
var b = createSingle()
console.log(a === b) // 打印true
var a1 = createSingle()
_unique = null // 在中途修改了_unique都会导致返回的对象不一致
var b1 = createSingle()
console.log(a1 === b1) // false
var createSingle1 = (function() {
var _unique = null;
function single() {
return {
a: 1
}
}
return function() {
if (_unique === null) {
// _unique = {
// a: 1
// }
_unique = single()
} else {
return _unique
}
}
})()
var a2 = createSingle1()
var b2 = createSingle1()
console.log(a2 === b2)
</script>
</head>
<body>
</body>
</html>