/* JavaScript DAY06 2022.11.08 */

/* 생성자 함수 --------------------------------------------------------------------- */

// 아래와 같은 것을 객체 리터럴이라고 한다.
let user = {
  name: 'Joonyoung',
  age: 30,
}

// 하지만 비슷한 객체 여러개 사용해야 하는 경우에는 생성자 함수 써서 사용한다.
function /* 첫글자는 대문자로 */ User(name, age){
  this.name = name;
  this.age = age;
}

// new 연산자를 사용해서 순식간에 비슷한 객체를 만들어 낸 것을 볼 수 있다.
let user1 = new User('Cho', 26);
let user2 = new User('Joon', 25);
let user3 = new User('Young', 24);
console.log(user1);
/* 결과: User {
  name: 'Cho',
  age: 26,
  }
} */
console.log(user2);
/* 결과: User {
  name: 'Joon',
  age: 25,
  }
} */
console.log(user3);
/* 결과: User {
  name: 'Young',
  age: 24,
  }
} */

// 생성자 함수의 동작 과정은 new 함수명();을 실행하면, 일단 빈 객체를 만들고, this에 할당한다.
// 함수 논문을 실행하면서 this에 프로퍼티들을 추가하고, this를 반환한다.
// 아래를 보면 알겠지만, 주석 처리한 두가지의 코드가 생략 된 것을 볼 수 있다.
// 어떤 함수든 new를 선언하는 순간 아래의 방식으로 알고리즘이 동작한다. (또한 첫번째 이름은 대문자로 하는 것이 관례)
function Test(name, age){
  // this = {}
  
  this.name = name;
  this.age = age;
  
  // return this;
}

/* Object - Computed property --------------------------------------------------------------------- */
let a = 'age';

const computedProperty = {
  name: 'Joonyoung',
  // 'age' 대신 [a]를 사용하면 배열이 아닌, 변수 a에 할당 된 값이 들어간다. 이런걸 '계산된 프로퍼티'라고 한다.
  [a]: 30,
  // 혹은 아래와 같이 식 자체를 넣어서, 사용 할 수도 있다.
  [1 + 4] : 5,
  ["안녕" + "하세요"] : "hello"
}

/* Object - methods --------------------------------------------------------------------- */

// Object.assign(): 객체 복제
const assignObject = {
  name: "Joonyoung"
}
// 위의 객체를 아래와 같이 한다고 복제가 되는것이 아니다. assignObject 객체의 참조 값만 복사되는 것이다.
const cloneAssign = assignObject;
// 동일하게 복제하려면 assign을 사용해야한다. 앞의 {}(빈 객체)는 초깃값이다. 따라서 빈 객체에 assignObject가 병합(복제)되는 것이다. 
const cloneAssign2 = Object.assign({}, assignObject);


// Object.keys(): 키를 배열로 반환
const keysObject = {
  a: 'a',
  b: 1
}
Object.keys(keysObject)
// 결과: [ 'a', 'b' ]


// Object.values(): 값을 배열로 반환
const valuesObject = {
  a: 'a',
  b: 1
}
Object.values(valuesObject)
// 결과: [ 'a', 1 ]


// Object.entries(): 키와 값을 배열로 반환
const entriesObject = {
  a: 'a',
  b: 1
}
Object.entries(entriesObject)
// 결과: [ [ 'a', 'a' ], [ 'b', 1 ] ]


// Object.fromEntries(): 키와 값의 배열을 객체로 반환
const arr = [
  ["name","Joonyoung"],
  ["age", 26]
];
Object.fromEntries(arr)
// 결과: { name: 'Joonyoung', age: 26 }
profile
개인 이력, 포폴 관리 및 기술 블로그 사이트 👉 https://aimzero-web.vercel.app/

0개의 댓글