工厂模式

作用

主要用来创建对象

简单工厂模式:用于创建单一的对象

方法工厂模式:用于创建重复创建对象

1.简单工厂模式

   /**
         简单的工厂函数
             1.声明工厂函数 createPerson
             2.通过工厂函数来创建对象
         * */
        function createPerson(name) {
            var o = {};//空对象
            //在空对象中添加方法
            o.name = name;
            o.getName = function () {
                console.log(this.name)
            }
            //返回包装好的对象
            return o
        }

        //使用函数
        var preson1 = createPerson("zhang san ");
        preson1.getName()
        console.log(preson1.name)
 
2.方法工厂模式
 /**
        方法工厂模式
        1.创建多个实例(构造函数)

     **/
    function Person(name) {
        this.name = name;
    }
    Person.prototype.getName = function () {
        console.log(this.name)
    }
    function Car(model) {
        this.model = model
    }
    Car.prototype.getModel = function () {
        console.log(this.model)
    }

    function create(type, param) {
        // return new this[type](param);
        /*
         安全模式 对this进行判断
        */
        if (this instanceof create) {//instanceof  前面是个对象  后面是个构造函数  用于判断后面的构造函数的原型是否存在前面的对象的原型链中
            return new this[type](param)
        } else {
            return new create(type, param)
        }
    }
    create.prototype = {
        person: Person,
        car: Car
    }
    var person1 = new create("person", "zhang san");

    var car1 = create("car", "benz");
    person1.getName()
    car1.getModel()
    /*
    创建person1时 创建了一个新的对象
    new create("person", "zhang san") ->{
        __proto__:create.prototype
    }
    当前对象的原型链指向工厂的原型对象
    person1=new this[type](param) = new Preson("zhang san"); ->{
        __proto__ : Person.prototype,
        name:'zhang san'
    }
    */
原文地址:https://www.cnblogs.com/JSWBK/p/13862820.html