7/26 과제 제출 - AI 서비스 완성! AI 웹개발 취업캠프 [NIPA/정보통신산업진흥원]

Alicia·2023년 7월 27일
0

AI_Web_nipa

목록 보기
4/31

> this. 를 안 붙이면 reference Error가 뜨는데 위에 선언을 했음에도 불구하고 왜 에러가 뜨는지 원인 찾아보기

**예시코드

var person = {
    name: “홍길동“,      // 이름 프로퍼티를 정의함.
    birthday: “030219”,  // 생년월일 프로퍼티를 정의함.
    age: 30,
    pId: “1234567",      // 개인 id 프로퍼티를 정의함.
    fullId: function() { // 생년월일과 개인 id를 합쳐서 주민등록번호를 반환함.
        return this.birthday + this.pId;
    },
};

예시 코드를 보면 person 객체가 선언되어 있습니다. fullId 함수는 객체의 메서드로, this 키워드를 사용하여 person 객체의 프로퍼티에 접근합니다.

this 키워드는 실행 문맥에 따라 달라집니다. 예시 코드에서 fullId 함수를 사용하는 방법에 따라 this 키워드의 의미가 달라질 수 있습니다.

함수 호출 시 this:

person.fullId()와 같이 메서드를 호출하면 함수 내부에서의 this는 person 객체를 가리킵니다. 따라서 this.birthday와 this.pId는 person 객체의 프로퍼티에 접근하게 됩니다.

fullId 함수를 따로 추출하여 다른 변수로 할당한 뒤 호출 시 this:

var myFunc = person.fullId; myFunc();와 같이 함수를 따로 변수에 할당한 후 호출하면 함수 내부에서의 this는 undefined가 됩니다. this.birthday와 this.pId가 undefined가 되는 것이죠. person 객체가 아닌 전역 객체에 해당 프로퍼티들이 존재하지 않기 때문입니다. 이는 함수가 메서드로서 호출되지 않았기 때문에 함수 내부에서 this가 어디에 바인딩되어야 할지 결정할 수 없기 때문입니다. (일반 함수 호출의 경우 this는 전역 객체 또는 undefined가 됩니다.)

0개의 댓글