掉了这个模式了,补上。
实现一个简单的单体结构:
var Student = {
age: 10,
name: '张三',
getAge: function(){
return this.age;
},
getName: function(){
return this.name;
},
}
console.log(Student.getAge()); //目的达到了,可以获取信息,但是没有保护,我只是让你获取姓名,你却可以修改Student.name = '李四'
// 使用闭包来私有化,阻止外界访问
var Student = (function(){
var _name = '张三';
var _age = 10;
function _getAge(){return _age}
function _getName(){return _name}
return {
getAge: function(){return _getAge()},
getName: function(){return _getName()}
}
})()
console.log(Student.getAge()) //这样就安全了、、
//这样虽然功能实现了,但是性能还待优化,我为何不能在使用的时候才初始化实例呢?也就是所谓的惰性加载
var Student = (function(){
var _instance;
function constructor(){
var _name = '张三';
var _age = 10;
function _getAge(){return _age}
function _getName(){return _name}
return {
getAge: function(){return _getAge()},
getName: function(){return _getName()}
}
}
return {
getInstance: function(){
return _instance || (_instance = constructor());
}
}
})()
console.log(Student.getInstance().getAge()) //哈哈,有意思把?
单体模式优点:
1. 可以来划分命名空间,从而清除全局变量所带来的危险,不污染全局变量。
2. 惰性加载实例。