let user = {
name: "John",
hi() { alert(this.name); },
bye() { alert("Bye"); }
};
(user.name == "John" ? user.hi : user.bye)();
브라우저에서는 아무것도 출력되지 않는다.
obj.method();
여기에는 연산자가 두개 있다.
점 '.'은 객체프로퍼티 obj.method에 접근하고
괄호 ()는 접근한 프로퍼티가 함수라면 호출한다.
let user = {
name: "John",
hi() { alert(this.name); }
}
let hi = user.hi;
hi();
두 연산을 각각 별도의 줄에서 두었다면 this 정보를 잃는 건 확실하다.
자바스크립트 .연산자는 프로퍼티값을 반환하지 않고 참조 타입(Reference Type)값을 반환하도록 명세서에 되어있다.
참조타입 값은 (base, name, strict)의 형태를 가진다.
base: 객체
name: 프로퍼티의 이름
strict: 엄격 모드에서 true
(user, "hi", true)
참조타입값에 괄호 ()를 붙여 호출하면 객체, 객체메서드와 연관된 모든 정보를 받아 호출한다.
obj.method() 같이 점을 사용하거나, objmethod 같이 대괄호를 사용해 함수를 호출했을 때만 this 값이 의도한 대로 전달된다.