使用工厂方法创建对象
㈠使用工厂方法创建对象
通过该方法可以大量的创建对象
function createPerson(name ,age ,gender){
//创建一个新的对象
var obj = new Object();
//向对象中添加属性
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
};
//将新的对象返回
return obj;
}
//使用传参的方式创建
var obj2 = createPerson("猪八戒",28,"男");
var obj3 = createPerson("蜘蛛精",18,"女");
var obj4 = createPerson("白骨精",16,"女");
obj3.sayName();
㈡存在的问题
使用工厂方法创建的对象,使用的构造函数都是Object
所以创建的对象都是Object这个类型
就导致我们无法区分出多种不同类型的对象
具体示例如下:
function createPerson(name ,age ,gender){
//创建一个新的对象
var obj = new Object();
//向对象中添加属性
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
};
//将新的对象返回
return obj;
}
var obj2 = createPerson("猪八戒",28,"男");
var obj3 = createPerson("蜘蛛精",18,"女");
var obj4 = createPerson("白骨精",16,"女");
obj3.sayName();
//用来创建狗的对象
function createDog(name ,age ){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHello = function(){
alert("汪汪~~");
};
return obj;
}
//创建一个狗的对象
var dog = cerateDog("旺财",3);
console.log(dog);
console.log(obj4);
结果显示:
如上图所示,使用工厂方法创建的对象,使用的构造函数都是Object
㈢完整代码演示及讲解
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 创建一个对象
*/
var obj = {
name:"孙悟空",
age:18,
gender:"男",
sayName:function(){
alert(this.name);
}
};
//obj.sayName();返回值: 孙悟空
/*
*如果按上面的办法要多创建一些类似对象的话,就是单纯的复制粘贴,很麻烦
* 所以:
* 使用工厂方法创建对象
* 通过该方法可以大批量的创建对象
*
* 通过此方法,把相同的部分都提取出来,然后再调用即可
*/
function createPerson(name , age ,gender){
//创建一个新的对象
var obj = new Object();
//这个obj和上面的obj不是一个obj,
//这个是局部的,上面是全局的
//向对象中添加属性
obj.name = name;
obj.age = age;
obj.gender = gender;//现在,上面创建的对象中有了三个属性,一个方法
obj.sayName = function(){
alert(this.name);
};
//将新的对象返回
return obj;
}
/*
* 用来创建狗的对象
*/
function createDog(name , age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayHello = function(){
alert("汪汪~~");
};
return obj;
}
var obj2 = createPerson("猪八戒",28,"男");
var obj3 = createPerson("白骨精",16,"女");
var obj4 = createPerson("蜘蛛精",18,"女");
/*
* 使用工厂方法创建的对象,使用的构造函数都是Object
* 所以创建的对象都是Object这个类型,
* 就导致我们无法区分出多种不同类型的对象
*/
//创建一个狗的对象
var dog = createDog("旺财",3);
console.log(dog);
console.log(obj4);
</script>
</head>
<body>
</body>
</html>
㈣小贴士
有关工厂方法创造对象更加深入的知识,可以查看以下的博客,很详细深刻:
1.https://blog.csdn.net/qq_34337272/article/details/80472071
2.https://www.jianshu.com/p/9727526ef9d9
3.https://www.cnblogs.com/lufangtao/archive/2012/04/26/2471958.html