Builder - garevna/js-course GitHub Wiki
Builder
Чем шаблон строитель отличается от фабрики:
function userBuilder ( userName = "", birthday = "", speciality = "", hobby = "" ) {
const user = {
defaultData: new Date( 2000, 10, 15 ).toLocaleString().split(", ")[0],
family: {
mother: {},
father: {},
sisters: [],
brothers: [],
wife: {},
children: []
}
}
user.setName = function ( name ) {
this.fullName = name
}
user.setMotherName = function ( name ) {
this.family.mother.fullName = name
}
user.setFatherName = function ( name ) {
this.family.father.fullName = name
}
user.createNewHuman = function ( params ) {
params = params ? params : {}
params.name = params.name ? params.name : ""
params.birthday = params.birthday ? params.birthday : this.defaultData
params.speciality = params.speciality ? params.speciality : ""
return {
name: params.name,
birthday: params.birthday,
speciality: params.speciality
}
}
user.addFamilyMember = function ( role, memberParams ) {
if ( Object.keys( this.family ).indexOf ( role ) < 0 ) return
Array.isArray( this.family [ role ] ) ?
this.family [ role ].push ( this.createNewHuman ( memberParams )) :
this.family [ role ] = this.createNewHuman ( memberParams )
}
let newUser = Object.create ( user )
newUser.name = userName
newUser.birthday = birthday
newUser.speciality = speciality
newUser.hobby = hobby
return newUser
}
var user1 = userBuilder ( "Henry", "05/09/200", "developer", "fishing" )
user1.addFamilyMember ( "mother", { name: "Mary", birthday: "04/08/1974", speciality: "teacher" } )
user1.addFamilyMember ( "sisters", { name: "Helen", birthday: "04/08/1998", speciality: "student" } )
