자바스크립트에선
객체의 프로퍼티에 함수를 할당해
객체에게 행동할 수 있는 능력을 부여해준다.
메서드 내부에서 this 키워드를 사용하면,
객체에 접근할 수 있습니다.
this 키워드는
메서드를 호출할 때 사용된 객체를 나타낸다.
위 코드 user.sayHi() 부분을 보면 user가 이에 해당한다.
즉, this == 호출한 객체!
bind함수를 이용해서 묶어주면 this를 반환한다.
즉 호출 시점에서 이 함수를 property로 가지는 객체를 의미한다.
this 값은 내가 어디에서 호출하느냐에 따라 값이 변한다.
(=this의 값은 함수를 호출하는 방법에 의해 결정된다.)
이 코드에서
this를 빼면,
아무런 값도 출력되지 않는다.
function makeUser() {
return {
name: "John",
ret(){
return this;
}
};
};
let user = makeUser();
alert( user.ref.name );
user.name으로 하면?
예상치 못한 에러가 발생할 수 있다.
user의 값이 변하게 되면,
sayHi 함수는 원치 않는 값을 참조하게 된다.
this값은 런타임시 결정된다.
즉, 호출 시점에 결정된다.
동일한 함수일지라도 다른 객체에서 호출했다면,
this가 참조하는 값이 달라진다.
점 앞의 객체가 무엇인가에 따라 자유롭게 결정된다.
메서드 vs 함수
메서드는 클래스 및 객체와 연관되어 있는 함수
클래스 내에 선언되어 있는 함수가 바로 메서드이고,
그것들과 상관없이 독립적으로 존재하는 것은 함수이다.
함수가 메서드보다 더 큰 개념이다.
화살표 함수
: 고유한 this를 가지지 않는다.
let user={
name:'John',
age:33,
sayHi(){
let allow = ()=>alert(this.name);
allow();
// this는 현재 객체를 의미한다
// 즉 this는 user다
}
};
user.sayHi();
... 이해가 되지 않는다 ㅠㅠ
나중에 더 찾아볼 것
자바 스크립트에는 클래스가 없다.
js엔진은 객체에서 property를 찾을 수 없으면,
그 객체의 prototype에서 찾는다.
prototype은 property lookup의 fallback으로서 기능한다..?
new 키워드
> js의 prototype 기반의 객체지향구조를 자바처럼 쓸 수 있도록 한다.
과제
참조
ko.javascript.info/object-methods
'여니의 프로그래밍 study > JavaScript' 카테고리의 다른 글
[Javascript] 객체를 원시형으로 변환하기 (0) | 2021.03.25 |
---|---|
[Javascript] 심볼형에 대해 알아보기 (0) | 2021.03.25 |
4-3 가비지 컬렉션 (Javascript) (3) | 2021.03.11 |
4-2 참조에 의한 객체 복사 (Javascript) (0) | 2021.03.11 |
4-1 객체 (Javascript) (0) | 2021.03.10 |