js设计模式9 混搭

这个比较好理解 实现方法有很多
        //一个简单的类
  	function Car(options){
  		this.name = options.name || "bmw";
  		this.price = options.price || 100;
  		}
  	//基础类
  	function Min(){}
  	Min.prototype = {
  		"run" : function(){alert("runing");},
  	  "stop" : function(){alert("stoping");},
  	  "hehe" : function(){alert("hehe");}
  	}
  	function mix(class1,class2){
  		if(arguments[2]){//提供了三个以上参数 只转换提供的确定的方法
  			for(var i=2,len=arguments.length;i<len;i++){
  				class1.prototype[arguments[i]] = class2.prototype[arguments[i]];
  				}
  			}else{//转换所有的
  				for(var method in class2.prototype){//method是名字 映射的是属性
  					if(!class1.prototype[method]){//这里也可以写成!Object.hasOwnProperty(class1.prototype, method)
  						class1.prototype[method] = class2.prototype[method];
  						}
  					}
  				
  				}
  		}
  	//mix(Car,Min);
  	mix(Car,Min,"run");
  	var car = new Car({"name":"hehe","price":0});
  	alert(car.price);//100
  	car.run();
  	car.stop();

你可能感兴趣的:(js设计模式9 混搭)