js设计模式2 modulePattern

先学习一下怎么把一坨代码组织到一起作为一个整体 答案是用{}

var myObjectLiteral = {//这个不太好翻译到底是神马 反正就是用{}包起来就是了
		myConfig:{
			useCaching:true,
			language:"chinese"
		},
		myMethod:function(){
			alert("run myMethod!!!!");
		},
		myMethod2:function(newConfig){
			alert(this.myConfig.useCaching);
			this.myConfig = newConfig;
			alert(this.myConfig.useCaching);
		}
	}

       alert(myObjectLiteral.myConfig.language);
	myObjectLiteral.myMethod();
	myObjectLiteral.myMethod2({language:"english",useCaching:false});

了解了这个之后我们可以把一坨代码作为返回值返回,把这个写在一次性代码中,就能藏起一些变量,只暴露给外部一部分权限了。简单的例子:

var obj = (function(){
	var privateVar = 1;//外界访问不到的变量和方法
	var privateMethod = function(){
		privateVar++;
	}
	return {//这里返回一些暴露的东东
		getPrivateVar:function(){
			return privateVar;
		},
		runPrivateMethod:function(){
			privateMethod();
		}
	}
})();


//alert(obj.privateVar);//undefined
//alert(obj.getPrivateVar());//1
//obj.runPrivateMethod();
//alert(obj.getPrivateVar());//2


来个比较模拟现实的购物车:

var basket = (function(){
		var products = [];
		function getCount(){
			return products.length;
		}
		function calculatePrice(){
				var c = getCount();
				var p = 0;
				while(c--){
					var product = products[c];
					p = p + (product.price)*(product.num);
				}
				return p;
		}
		function addProduct(product){
			products.push(product);
		}
		function checkProduct(pname){
			for(var i=0;i<getCount();i++){
				if(products[i].name == pname){
					alert(products[i].num+" * "+products[i].price);
					break;
				}
			}
		}
		return {
				"addProduct":addProduct,
				"calculatePrice":calculatePrice,
				"checkProduct":checkProduct
			}
	})();
	
	
	basket.addProduct({"num":2,"price":1,"name":"balana"});
	basket.addProduct({"num":3,"price":2,"name":"huanggua"});
	alert(basket.calculatePrice());
	basket.checkProduct("huanggua");

外部变量导入:书上抄的 不知道这样有什么用啊?  ?_?

// Global module
02	var myModule = (function ( jQ, _ ) {
03	   
04	    function privateMethod1(){
05	        jQ(".container").html("test");
06	    };
07	 
08	    function privateMethod2(){
09	      console.log( _.min([10, 5, 100, 2, 1000]) );
10	    };
11	     
12	    return{
13	        publicMethod: function(){
14	            privateMethod1();               
15	        }           
16	    }
17	    
18	// Pull in jQuery and Underscore
19	}( jQuery, _ ));
20	 
21	myModule.publicMethod();

你可能感兴趣的:(js设计模式2 modulePattern)