JS中Module模式基本和高级用法

View Code
  1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2 <html xmlns="http://www.w3.org/1999/xhtml">
  3 <head>
  4     <title>JS中Module模式基本和高级用法.htm</title>
  5 
  6     <script src="jquery-1.3.2.min.js" type="text/javascript"></script>
  7 
  8     <script src="js/blogModule.js" type="text/javascript"></script>
  9 </head>
 10 <body>
 11     <span>code:</span>
 12     <input type="text" name="txteq" id="eq" />
 13 </body>
 14 </html>
 15 
 16 <script type="text/javascript" language="javascript">
 17     /*----基本用法----*/
 18     /*知识点*/
 19     /*(jQuery,YAHOO)  函数最后的这种写法是 函数的自执行  函数的参数就是这两个变量*/
 20     /*例1*/
 21     var Calculator = function(id) {
 22         //这里可以声明私有成员
 23 
 24         var eqCtl = document.getElementById(id);
 25         return {
 26             // 暴露公开的成员
 27             add: function(x, y) {
 28                 var val = x + y;
 29                 eqCtl.value = val;
 30             }
 31         };
 32     };
 33     /*调用*/
 34     var id = "eq";
 35     var calculator = new Calculator(id);
 36     calculator.add(2, 2);
 37     /*引用全局变量*/
 38     (function($) {
 39         // 这里,我们的代码就可以使用全局的jQuery对象了,YAHOO也是一样
 40     } (jQuery));
 41     /*例2*/
 42     var blogModule = (function() {
 43         var my = {}, privateName = "博客园";
 44 
 45         function privateAddTopic(data) {
 46             //这里是内部处理代码
 47         }
 48 
 49 
 50         my.name = privateName;
 51         my.AddTopic = function(data) {
 52             privateAddTopic(data);
 53         };
 54         my.text = "";
 55         my.passwold = "";
 56         my.email = "";
 57 
 58 
 59         return my;
 60     } ());
 61     var data;
 62     blogModule.AddTopic(data);
 63     var name = blogModule.name;
 64     var text = blogModule.text;
 65     var passwold = blogModule.passwold;
 66     var email = blogModule.email;
 67     //==========解释===========================
 68     //以上声明了一个全局变量blogModule,
 69     //并且带有5个可访问的属性:AddTopic(),name,text......  ,
 70     //其他函数都在匿名函数的闭包里
 71     //保持私有状态,而且我们也可以很方便的将其他的全局变量传入
 72     //========================================
 73 
 74 
 75     /*----高级用法----*/
 76 
 77     /*例3*/
 78     /*----紧耦合扩展----*/
 79     var blogModule = (function(my) {
 80         var privateName = "博客园";
 81         my.AddPhto = function() {
 82             //内部处理代码
 83 
 84             alert(privateName);
 85         };
 86         return my;
 87     } (blogModule));
 88     /* 例4*/
 89     /*----松耦合扩展----*/
 90     var blogModule = (function(my) {
 91         var privateName = "博客园";
 92         my.AddPhto = function() {
 93             //内部处理代码
 94 
 95             alert(privateName);
 96         };
 97         return my;
 98     } (blogModule || {}));
 99     /*例3  例4对比结论*/
100     //虽然松耦合扩展很牛叉了,但是可能也会存在一些限制,
101     //比如你没办法重写你的一些属性或者函数,也不能在初
102     //始化的时候就是用Module的属性。紧耦合扩展限制了加
103     //载顺序,但是提供了我们重载的机会
104     /*例5*/
105     var blogModule = (function(my) {
106         var oldAddPhtoMethod = my.AddPhto;
107         my.AddPhto = function() {
108             //重载方法  依然可以通过oldAddPhtoMethod调用旧方法
109         };
110     } (blogModule));
111     
112     /*克隆与继承*/
113     var blogModule = (function(old) {
114         var my = {},
115             key;
116         for (key in old) {
117             if (old.hasOwnProperty(key)) {
118                 my[key] = old[key];
119 
120             }
121         }
122         var oldAddPhtoMethod = old.AddPhto;
123         my.AddPhto = function() {
124             alert(typeof my);
125             //克隆以后进行了重写,当然也可以调用旧的方法
126         };
127 
128         return my;
129 
130     } (blogModule));
131     var myblogmodule =blogModule();
132     myblogmodule.AddPhto();
133     
134 </script>
posted @ 2012-05-16 11:52  彭满意  阅读(803)  评论(0编辑  收藏  举报