320x100
320x100

문제의 소스코드

let user = {
  name: "John",
  hi() { alert(this.name); },
  bye() { alert("Bye"); }
};

user.hi(); // John (간단한 호출은 의도한 대로 잘 동작합니다.)

// name에 따라 user.hi나 user.bye가 호출되게 해봅시다.
(user.name == "John" ? user.hi : user.bye)(); // TypeError: Cannot read property 'name' of undefined
// 정상 작동
user.hi();

// 오류 발생
(user.name == "John" ? user.hi : user.bye)();

 : 메서드를 호출 할 때 this에 undefined가 할당되어 에러 발생 

 

 

 

 

참조타입

: 점 . 은 객체 프로퍼티 obj.method에 접근

: 괄호 ()는 접근한 프로퍼티(메서드)를 실행

let user = {
  name: "John",
  hi() { alert(this.name); }
}

// 메서드 접근과 호출을 별도의 줄에서 실행함
let hi = user.hi;
hi(); // this가 undefined이기 때문에 에러가 발생합니다.

: 위와 같이 두 연산을 별도의 줄에 둘 경우 this 정보를 잃게 되면서 오류 발생

 

 

※ 참조타입에 속하는 값

- base : 객체

- name : 프로퍼티의 이름

- strict : 엄격모드에서 true

 

 

 

 

Refference

 

참조 타입

 

ko.javascript.info

 

300x250
728x90