单体是在脚本加载时创建的,能将一系列有关联的变量和方法组织为一个逻辑单元,逻辑单元里面的内容通过单一的变量进行访问,也是笔记基础与常用的面向对象的定义方法。 单体模式(singleton) var Sky = { /* * 作用一,变量管理 */ nickName: "sky", age: "26", /* * 作用二,加载中初始化变量 * 在加载过程中执行并初始化Sky.info */ timeInfo: function() { var _year = new Date().getFullYear(); return _year; }(), /* * 作用三,函数管理,让你的函数看起来不再那么散乱 */ sayHello: function() { alert("hello,world!"); } } //所有内部信息通过Sky这个变量进行访问; alert(Sky.timeInfo);
/*Basic Singleton*/ var Singleton = { attribute1:true, attribute2:10, method1:function(){}, method2:function(){} };
var box = { width:0, height:0, getArea:function(){ return this.width*this.height;//js中对象成的访问必须是显示的,即this是不能省略的 }, init:function(w,h){ // width = w; // height = h;这种方式相当于定义了两个全局变量,(没加var声明的变量为全局变量) // 并不是对对象width和height的赋值 //下面是正确的 this.width = w; this.height = h; } }//box划分了一个命名空间,命名空间里的变量只在空间里有效
var box = { width:0, height:0,//单体的变量 getArea:function(){ return width*height;//中的,width,height其实并不是单体的变量,而是在init中定义的全局变量 } init:function(w,h){ width = w; height = h; } }//init中width,height其实并不是单体的变量 window.onload = function(){ var init = box.getArea(); alert(init); }
var box = { width:0, height:0, getArea:function(){ return width*height; }, init:function(w,h){ width = w; height = h; } } window.onload = function(){ width = 0; height = 0; //or box.init(0,0); var init = box.getArea(); alert(init); }
var box = { width:0, height:0, getArea:function(){ return width*height;//js中对象成的访问必须是显示的,即this是不能省略的 }, init:function(w,h){ width = w; height = h; } }//这里的width,height其实并不是单体的对象 window.onload = function(){ width = 0; height = 0; var width = box.getArea(); alert(width); }
var box = { width:2, height:2, getArea:function(){ return this.width*this.height;//js中对象成的访问必须是显示的,即this是不能省略的 }, init:function(w,h){ this.width = w; this.height = h; } } window.onload = function(){ width = 0; height = 0; var width = box.getArea(); alert(width); }
var circle = (function(){ //pravite member! var r = 5; var pi = 3.1416;//后面用分号 return{//public member getArea:function(){ return r*r*pi;//访问私有成员不要加this },//后面用逗号 //如果想改变r和pi的值,只能通过设置一个公有的函数来实现 init:function(setR){ r = setR; } } })() window.onload = function(){ circle.r = 0;//无法访问私有成员,相当于又为circle创建了一个共有成员r alert(circle.getArea()); circle.init(0);//通过公有的工具函数便可以访问了。 alert(circle.getArea()); };
// 利用单体的分支技术来定义XHR(XMLHttpRequest)对象,必须要用闭包才可以实现 var XHR = (function(){ //The three branches var standard = { cXHR:function(){ return new XMLHttpRequest(); } }; var activeXNew = { cXHR:function(){ return new ActiveXObject('Msxml2.XMLHttp'); } }; var activeXOld = { cXHR:function(){ return new ActiveXObject('Microsoft.XMLHttp'); } }; //To assign(分配) the branch, try each method;return whatever doesn't fail var testObject; try{ testObject = standard.cXHR(); return standard;// return this branch if no error was thrown }catch(e){ try{ testObject = activeXNew.cXHR(); return activeXNew; }catch(e){ try{ testObject = activeXOld.cXHR(); return activeXOld; }catch(e){ throw new Error('Create the XMLHttpRequestObject failed!'); } } } })(); window.onload = function(){ alert(XHR.cXHR()); }
|