IBZ
97
2019-03-11 21:01:36
4
807

자바스크립트 class 질문



class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
    $(this.x).on({click:Point.isclicked});
  }

  static isclicked(a, b, e) {
    const dx = a.x;
    const dy = b.y + 2;
    console.log(dy);
  }
}

const p1 = new Point('.cell', 4);
Point.isclicked(p1);

최종 목표가 x 패러미터에서 .call을 받고 isclicked로 패러미터를 전달하는 건데요

저렇게 연습하던 중에 x는 .cell을 못 받고 y는 undefined로 나오네요.


class Number {
  constructor(x) {
    this.x = x;
  }
  static distance(a) {
    const dx = a.x + 1;
    console.log(dx);
  }
}
const p2 = new Number(5);
Number.distance(p2);

제가 이걸 보고 따라했는데 어디가 잘못된건지 알 수 있을까요

0
  • 답변 4

  • Gear
    432
    2019-03-11 21:21:48 작성 2019-03-11 21:22:47 수정됨

    isclicked는 a, b, c 세 개의 매개변수를 갖고있죠?

    그런데 마지막 줄을 보면 Point.isclicked(p1);네요

    a 매개변수에만 인수를 넘겨줬습니다.

    하지만 isclicked 내부에는 const dy = b.y + 2; 이렇게 인수를 넘겨받지 못한 두 번째 매개변수의 y 속성을 참조하려고 하네요.


    undefined의 y를 참조하려고 하니 에러가 나는 것이겠죠.

    'Cannot read property 'y' of undefined' 라고 나왔을겁니다.

    'undefined의 y 속성을 읽을 수 없음'이죠.


    마지막 줄을 임시로 Point.isclicked(p1, {y: 1}); 이런 식으로 해주면 오류 메시지는 나오지 않는 것을 확인할 수 있을겁니다.

  • IBZ
    97
    2019-03-11 21:25:53 작성 2019-03-11 21:28:56 수정됨
    {y:1} 에서 값을 감싼 컬리브라켓은 새오브젝트 생성을 의미하는건가요? 
  • Gear
    432
    2019-03-11 21:33:59

    그런걸로 압니다.

    MDN의 자바스크립트 재입문하기에서는 {}는 new Object()와 의미적으로 동치라고 표현하네요.


    $(this.x).on({click:Point.isclicked})는 알고 쓰신게 아닌가요?

  • IBZ
    97
    2019-03-11 21:36:35

    제가 이론은 좀 부족해서요. 기능을 만들 줄은 알아도 이게 구조적으로 어떤 상태인지 이런 부분까지는 잘 모릅니다.

    답변 감사합니다. x.a가 항상 undefined로 나왔던 문제도 해결됐습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.