结构器

假如不必结构器,创立目标是这样的

const xiaoming = {
    name: '小明',
    age: 23,
    career: 'coder',
}

假如我在创立一个小红则需求再写一个

const xiaoming = {
    name: '小明',
    age: 23,
    career: 'coder',
}
const xiaomhong = {
    name: '小红',
    age: 23,
    career: 'product manager',
}

假如有一天要创立1000个目标则要写1000个字面量,这样是不是很麻烦,那么结构器就出来了。

function User(name , age, career) {
    this.name = name
    this.age = age
    this.career = career 
}

经过以上的结构器咱们创立目标只需求传参就好了

const user = new User(name, age, career)

经过以上的结构器举例咱们看一下什么是变的什么是不变的。不变的是这些特点,变的是特点值。结构器做的就是将特点赋值给目标的过程进行封装,咱们不要手写赋值了,保证了共性的不变,同时将 name、age、career 各自的取值操作敞开,保证了个性的灵敏。

简略工厂形式

假如结构器是抽象目标的变和不变,那么工厂形式是区别每个函数或者说是类的变和不变。在结构器的举例中不管是程序员职位和产品经理的职位都是用的User这个函数,我现在想区别不同的工种,并且添加他们各自的责任这个特点那么该怎样写呢,假如还是用结构器的话是这样写,添加一个结构函数。

function Coder(name , age) {
    this.name = name
    this.age = age
    this.career = 'coder' 
    this.work = ['写代码','写系分', '修Bug']
}
function ProductManager(name, age) {
    this.name = name 
    this.age = age
    this.career = 'product manager'
    this.work = ['订会议室', '写PRD', '催更']
}

现在咱们有两个类(后面或许还会有更多的类),麻烦的事情来了:难道我每从数据库拿到一条数据,都要人工判断一下这个员工的工种,然后手动给它分配结构器吗?这也是一个“变”,咱们把这个“变”交给一个函数去处理:

function Factory(name, age, career) {
    switch(career) {
        case 'coder':
            return new Coder(name, age) 
            break
        case 'product manager':
            return new ProductManager(name, age)
            break
        ...
}

而且每个工种都要写一个结构函数是不是还挺麻烦,那么咱们要区别一下变和不变。变得是特点值以及 work 字段需求随 career 字段取值的不同而改动。,不变的是那几个特点。咱们对变和不变做一个抽离。

function User(name , age, career, work) {
    this.name = name
    this.age = age
    this.career = career 
    this.work = work
}
function Factory(name, age, career) {
    let work
    switch(career) {
        case 'coder':
            work =  ['写代码','写系分', '修Bug'] 
            break
        case 'product manager':
            work = ['订会议室', '写PRD', '催更']
            break
        case 'boss':
            work = ['喝茶', '看报', '见客户']
        case 'xxx':
            // 其它工种的责任分配
            ...
    return new User(name, age, career, work)
}

不必自己时间想着我拿到的这组数据是什么工种、我应该怎样给它分配结构函数,更不必手写无数个结构函数——Factory现已帮咱们做完了全部,而咱们只需求像曾经相同无脑传参就可以了!