composition 2

by Artem

JavaScript

'use strict';

const greet = (state) => ({
  greet: () => `Hello`
})

const User = (name, position) => {
  let user = {
    position,
    get name() {
      return `Hello, my name is ${name}`
    },
    set name(value) {
      throw new Error(`name has already been specified.`)
    }
  }
  return Object.assign(
    user,
    greet(user)
  );
}


const vasya = User('vasya', 20);
console.log(vasya.greet());