메서드의 스코프

김정준·2022년 10월 3일
0

JS

목록 보기
12/13

1. 함수의 스코프

자바스크립트는 렉시컬 스코프를 따지므로 함수를 어디서 호출했는지가 아니라 함수를 어디서 정의했는지에 따라 상위 스코프를 결정한다. 함수가 호출된 위치는 상위 스코프 결정에 어떠한 영향도 주지 않는다. 즉, 함수의 상위 스코프는 언제나 자신이 정의된 스코프다.

출처 : 이웅모, ⌜모던 자바스크립트 Deep Dive⌟, 위키북스, 2022, 199쪽

2. 메서드의 스코프 예제

  // 생성자 함수
  function con() {
    let a = 5;
    let b = 6;
   
    this.a = 1;
    this.b = 2;
    this.method = function () {
      console.log(a);
      console.log(b);
    };
    this.__proto__.pro_method1 = function () {
      console.log(a);
      console.log(b);
    };
  }

  let a = 55;
  let b = 66;

  obj = new con(); // 객체 생성
  console.log(obj); // con {a: 1, b: 2, method: ƒ}
  console.log(obj.__proto__); // {pro_method1: ƒ, constructor: ƒ}
  console.log(con.prototype); // {pro_method1: ƒ, constructor: ƒ}
  console.log(obj.__proto__ === con.prototype); // true

  obj.method(); // 5 6

  con.prototype.pro_method2 = function () {
    console.log(a);
    console.log(b);
  };

  console.log(con.prototype); // {pro_method1: ƒ, pro_method2: ƒ, constructor: ƒ}
  console.log(obj.__proto__); // {pro_method1: ƒ, pro_method2: ƒ, constructor: ƒ}

  obj.pro_method2(); // 55 66
  con.prototype.pro_method2(); // 55 66
  obj.pro_method1(); // 5 6
  con.prototype.pro_method1(); // 5 6

0개의 댓글