使用工厂方法创建对象

㈠使用工厂方法创建对象

通过该方法可以大量的创建对象

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

posted @ 2019-12-11 00:58  石海莹  阅读(1019)  评论(0编辑  收藏  举报