简单工厂笔记
两种方式:
第一种:通过实例化对象创建
第二种:通过创建一个新对象然后包装增强其属性和功能来实现
差异性:前一种通过类创建的 对象,如果这些类继承同一个父类,他们父类原型上的方法是可以共用的;后一种通过寄生方式创建的对象都是一个新的个体,所以他们的方法就不能共用了
第一种和第二种都 以生产足球、篮球、网球为例子
第一种方式
1 var Basketball = function(){ 2 this.intro = '篮球盛行于美国'; 3 } 4 Basketball.prototype={ 5 getMember:function(){ 6 console.log("每个队伍需要5名队员") 7 }, 8 getBallSize:function(){ 9 console.log("篮球很大"); 10 } 11 } 12 var Football = function(){ 13 this.intro="足球在全世界范围类很流行"; 14 } 15 Football.prototype={ 16 getMember:function(){ 17 console.log("每个队伍需要11名队员") 18 }, 19 getBallSize:function(){ 20 console.log("足球很大"); 21 } 22 } 23 var Tennis = function(){ 24 this.intro="每年有很多网球系列赛"; 25 } 26 Tennis.prototype={ 27 getMember:function(){ 28 console.log("每个队伍需要1名队员") 29 }, 30 getBallSize:function(){ 31 console.log("网球很小"); 32 } 33 } 34 35 //第一种球工厂 36 var ballFactory=function(name){ 37 switch(name){ 38 case 'basketball': 39 return new Basketball(); 40 case 'football': 41 return new Football(); 42 case 'tennis': 43 return new Tennis(); 44 } 45 }
第一种简单工厂测试代码
1 //第一种测试 2 var football=ballFactory("football"); 3 console.log(football.intro); 4 football.getMember(); 5 football.getBallSize();
第二种简单工厂
1 //第二种 2 function createBall(type,intro,num,ballsize){ 3 var o = new Object(); 4 o.intro = intro; 5 o.num = num; 6 o.ballsize = ballsize; 7 o.getMember = function(){ 8 //公共方法getNember 9 console.log("每个队伍需要"+this.num+"名队员"); 10 } 11 o.getBallSize = function(){ 12 //公共方法getBallSize 13 console.log(this.ballsize); 14 } 15 if(type == 'basketball'){ 16 //篮球差异部分 17 } 18 if(type=="football"){ 19 //足球差异部分 20 } 21 if(type=="tennis"){ 22 //网球差异部分 23 } 24 return o; 25 }
第二种简单工厂测试
//第二种测试 var football2=createBall("football","足球在全世界范围类很流行",11,"足球很大"); console.log(football2.intro); football2.getMember(); football2.getBallSize();