㈠使用工厂方法创建对象
通过该方法可以大量的创建对象
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