单例模式
单例就是保证一个类只有一个实例,实现的方法一般是先判断实例是否存在,如果存在直接返回,如果不存在久创建了再返回,这就保证了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。
单例模式的作用和注意事项
模式作用:
1.模块间通信
2.系统中某个类的对象只能存在一个
3.保护自己属性和方法
注意事项:
1.注意this 的使用(谁调指向谁)
2.闭包容易造成内存泄漏,不需要的赶快干掉
3.注意new的成本(继承)
单例模式代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <script> var xiaowang = (function (argument) { var xiaowangjia = function (message) { this.menling = message; }; var men; var info = { sendMessage:function (message) { if(!men){ men = new xiaowangjia(message); } return men; } }; return info; })(); var xiaoli = { callXiaowang:function (msg) { var _xw = xiaowang.sendMessage(msg); alert(_xw.menling); _xw = null;//回收 } }; xiaoli.callXiaowang('didi'); </script> <script> //页面上6个按钮 //a b c => top //d e f => banner var top = { init:function () { this.render(); this.bind(); }, a:4, render:function () { var me = this; //top me.btna = $("#a"); }, bind:function () { var me = this; me.btna.click(function () { me.test(); }); }, test:function () { a = 5; } }; var banner = { init:function () { this.render(); this.bind(); }, a:4, render:function () { var me = this; //top me.btna = $("#d"); }, bind:function () { var me = this; me.btna.click(function () { me.test(); }); }, test:function () { //a = 6; top.a = 6; } }; top.init(); banner.init(); </script> </body> </html>