javascript-简单工厂两种实现方式

时间:2022-05-15 11:11:48

简单工厂笔记
 两种方式:
 第一种:通过实例化对象创建
 第二种:通过创建一个新对象然后包装增强其属性和功能来实现
 差异性:前一种通过类创建的 对象,如果这些类继承同一个父类,他们父类原型上的方法是可以共用的;后一种通过寄生方式创建的对象都是一个新的个体,所以他们的方法就不能共用了
 第一种和第二种都 以生产足球、篮球、网球为例子
 第一种方式

         var Basketball = function(){
this.intro = '篮球盛行于美国';
}
Basketball.prototype={
getMember:function(){
console.log("每个队伍需要5名队员")
},
getBallSize:function(){
console.log("篮球很大");
}
}
var Football = function(){
this.intro="足球在全世界范围类很流行";
}
Football.prototype={
getMember:function(){
console.log("每个队伍需要11名队员")
},
getBallSize:function(){
console.log("足球很大");
}
}
var Tennis = function(){
this.intro="每年有很多网球系列赛";
}
Tennis.prototype={
getMember:function(){
console.log("每个队伍需要1名队员")
},
getBallSize:function(){
console.log("网球很小");
}
} //第一种球工厂
var ballFactory=function(name){
switch(name){
case 'basketball':
return new Basketball();
case 'football':
return new Football();
case 'tennis':
return new Tennis();
}
}

第一种简单工厂测试代码

          //第一种测试
var football=ballFactory("football");
console.log(football.intro);
football.getMember();
football.getBallSize();

第二种简单工厂

 1          //第二种
function createBall(type,intro,num,ballsize){
var o = new Object();
o.intro = intro;
o.num = num;
o.ballsize = ballsize;
o.getMember = function(){
//公共方法getNember
console.log("每个队伍需要"+this.num+"名队员");
}
o.getBallSize = function(){
//公共方法getBallSize
console.log(this.ballsize);
}
if(type == 'basketball'){
//篮球差异部分
}
if(type=="football"){
//足球差异部分
}
if(type=="tennis"){
//网球差异部分
}
return o;
}

第二种简单工厂测试

         //第二种测试
var football2=createBall("football","足球在全世界范围类很流行",11,"足球很大");
console.log(football2.intro);
football2.getMember();
football2.getBallSize();