结构器
假如不必结构器,创立目标是这样的
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现已帮咱们做完了全部,而咱们只需求像曾经相同无脑传参就可以了!