《JS设计模式》笔记-简单工厂模式和安全的工厂方法

简单工厂模式的理念就是创建对象

简单工厂模式一

var Basketball = function () {
    this.intro = '篮球'
}
Basketball.prototype.getIntro = function () {
    console.log(this.intro)
}
var Footable = function () {
    this.intro = '足球'
}
Footable.prototype.getIntro = function () {
    console.log(this.intro)
}

var SuperFactory = function (name) {
    switch (name) {
        case 'basketball':
            return new Basketball()
        break
        case 'footable':
            return new Footable()
        break
    }
}
SuperFactory('footable').getIntro()

简单工厂模式二

function createBook(name, time, type) {
    var o = new Object()
    o.name = name
    o.time = time
    o.getName = function () {
        console.log(this.name)
    }
    if (type === 'hello'){
        o.sayHello = function () {
            console.log('hello')
        }
    }
    return o
}
var book1 = createBook('语文', '2019-11-26').getName()

第一种是通过类实例化对象创建的,第二种是通过创建新对象,然后包装增强其属性和功能实现的

安全的工厂方法

核心思路:将方法写在原型对象上,然后返回原型对象中该方法的实例化类

安全的实现思路是判断 this 是否和Factory存在类继承关系。不加new关键字时,方法调用环境时window,所以this指向window,这时 需要new Factory 来实例化对象。如果使用了new关键字,构造函数中的this指向的是所创建实例化类,跟Factory存在类继承关系。

var Factory = function (type, content) {
    if (this instanceof Factory) {
        var s = new this[type](content)
        return s
    } else {
        return new Factory(type, content)
    }
}
Factory.prototype.footable = function (content) {
    console.log(content)
}
Factory.prototype.basketball = function (content) {
    console.log(content)
}
Factory('footable', '足球')
new Factory('footable', '足球')

随机浏览