掉了这个模式了,补上。
实现一个简单的单体结构:
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. 惰性加载实例。