首页 > 代码库 > 【JavaScript】工厂方法

【JavaScript】工厂方法

构造函数,用于构造对象。也叫工厂方式【原料、加工、出厂】

空对象,相当于“原料”

给对象加上属性和方法,相当于“加工”

把对象返回出去,相当于“出厂”

//工厂方式【原料、加工、出厂】
function createPerson(name,gender){ //构造函数,用于构造对象
    var obj=new Object();//空对象,相当于“原料”
    //给对象加上属性和方法,相当于“加工”
    obj.name=name;
    obj.gender=gender;
    obj.showName= function () {
        alert("我叫:"+obj.name)
    };
    obj.showGender= function () {
        alert("我是"+obj.gender+"的")
    };
    return obj;//把对象返回出去,相当于“出厂”
}
var person1=createPerson("syr","女");
var person2=createPerson("xixi","男");
person1.showName();
person1.showGender();
person2.showName();
person2.showGender();

这样看起来蛮清晰,但是此时工厂方法有两个缺点

第一,没有new(解决方法:在函数前面加上new)

第二,每个对象都有一套自己的函数,这样浪费了资源 ?

技术分享

 

 

 

 

 

 

 


下面是另一种写法,不用new对象和return对象【解决了第一个问题】

 1 function createPerson(name,gender){ //构造函数,用于构造对象
 2 //    var this=new Object(); 系统默认new了一个
 3     this.name=name;         //都换成this
 4     this.gender=gender;
 5     this.showName= function () {
 6         alert("我叫:"+this.name)
 7     };
 8     this.showGender= function () {
 9         alert("我是"+this.gender+"的")
10     };
11 //    return this; 系统默认return了
12 }
13 var person1=new createPerson("syr","女");
14 var person2=new createPerson("xixi","男");
15 person1.showName();
16 person1.showGender();
17 person2.showName();
18 person2.showGender();

 解决第二个问题,看下一篇【原型】

【JavaScript】工厂方法