속성접근자

lee jae hwan·2022년 7월 26일

javascript

목록 보기
47/107
let user = {
  name: "John",
  surname: "Smith",

  set fullName(value) {
    [this.name, this.surname] = value.split(" ");
  },

  get fullName() {
    return `${this.name} ${this.surname}`;
  }
};
let admin = {
  __proto__: user,
  isAdmin: true
};

console.log( admin.fullName );

admin은 user를 상속받았으므로 user프로퍼티들을 내 속성인것처럼 사용할 수 있다.

console.log( admin.fullName );

속성접근자는 admin객체에서 fullName프로퍼티를 찾으며 없으면 상위객체에서 찾아 admin객체에 연결해준다.

fullName이 접근자프로퍼티이며 내부에 this가 있네....?

접근자프로퍼티는 접근과 동시에 호출되는 특성이 있으므로 admin객체에 get메소드를 연결하고 호출한다.

속성접근자에의해 객체와 접근자프로퍼티가 연결되어 호출하는것까지가 속성접근자가 한일이고 호출이후 메소드내부의 코드수행은 자바스크립트의 규칙에 따르므로 this평가는 속성접근자와 무관한 것이다.

fullName메소드는 admin객체에 연결되어있기 때문에 this는 당연히 admin객체를 참조하는 것이다.


이러한 속성접근자에의한 특성은 자바스크립트 함수가 언제 어디서든 원하는 곳으로 전달되어 호출할수있는 유연성있는 객체이기 때문이라고 여러번 언급했다.

속성접근자로 접근한 메모리에는 원시값 또는 객체의 메모리번지값이 있을 수 있다.

  • 원시값일때는 원시값을 연결된다.
  • 메모리번지값일때는 객체.식별자에 해당 메모리번지를 연결된다.
    해당 메모리번지를 찾아가면 함수가 있을 수도 있고 객체가 있을수도 있다.
    함수라면 별도로 호출을 해야하며 속성접근자가 호출해주지 않는다.
    (만약 접근자프로퍼티라면 호출한다.)

admin.name은 속성접근자에의해 admin객체의 name속성이 연결되고 admin.name이 가리키는 곳에가면 'John'문자열이 있다.

문자열하나 반환하는데 뭐가 이렇게 복잡하고 알아야할것이 많냐....
이 과정중에 비논리적인 것이 있는가?
그렇다 이것이 언어가 굴러가는 방식인것이다.

0개의 댓글