더북(TheBook)

line.xline.y는 정말 잘 결정한 설계 요소다. 사용법을 보자(예제 1-4).

예제 1-4 line.x와 line.y 사용법

소스 파일 1장\rj3\pathFromObjects.js

(function() {
var objectData = [
      { x: 10, y: 130 },
      { x: 100, y: 60 },
      { x: 190, y: 160 },
      { x: 280, y: 10 }
    ],
    lineGenerator = rj3.svg.line()
      .x(function(d) { return d.x; })
      .y(function(d) { return d.y; }),
    path = lineGenerator(objectData);
 
document.getElementById('pathFromObjects').setAttribute('d',path);
}());

 

이렇게 호출하면,

x(function(d) { return d.x; })

예제 1-1에서 주어진 함수로 getX 변수의 기본 함수를 교체한다. 그리고 while 루프에서,

points.push([+getX.call(this,d,i), +getY.call(this,d,i)]);

getX.call은 교체한 함수를 호출하여 해당 객체의 x프로퍼티, 즉 사본 아닌 원래 객체 값을 반환한다.

call을 눈여겨볼 가치가 있다. 18장에서 다룰 내용을 몰래 갖다 쓰지 않아도, x 좌푯값을 얻는 함수가 무엇이든(여기서 function(d) {return d.x ;} 함수는 인자가 하나밖에 없지만) 인자 2개를 넘겨 호출하도록 마련됐다. 두 번째 인자 i는 배열 인덱스로, 여기서는 쓰지 않지만 다른 곳에서는 쓸 수 있다. 바로 이것이 함수 오버로딩(function overloading)이라는 객체 지향 개념을 자바스크립트에 녹인 원리다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.