다형성

devjune·2021년 9월 26일
0

ES5

목록 보기
4/14

우리가 만들었던 filter, map 함수와 같은 기능이 이미 Array 내장함수에 정의되어 있다.

[1, 2, 3, 4].map(function(val) { return val * 2; }); // [2, 4, 6, 8];

[1, 2, 3, 4].filter(function(val) { return val % 2; });// [1, 3];

동일한 기능을 하지만, 위 map과 filter는 함수가 아닌 메서드다.
메서드는 순수함수가 아니고, 객체 상태에 따라 결과가 달라지는 특징을 가지고 있다.

메서드는 객체 지향 프로그래밍이다.
메서드는 해당 클래스에 정의되기 때문에 해당 클래스의 인스턴스에서만 사용할 수 있다.
즉, Array가 아닌 객체에서는 map, filter를 사용할 수 없다는 뜻이다.

//ArrayLike
console.log(
  document.querySelectorAll('*').map(function(node) {
    return node.nodeName;
  })
); //document.querySelectorAll(...).map is not a function

하지만 만들었던 map() 함수로 적용하면 실행이 가능하다.

console.log(
  _map(document.querySelectorAll('*'), function(node) {
    return node.nodeName;
  })
); // ['HTML', 'HEAD', ...]

메서드는 해당 객체가 있어야지만 실행이 가능하기 때문에 평가 시점이 굉장히 중요하다.

반면, 함수는 객체가 있기 전부터 존재하기 때문에 평가 시점이 상대적으로 유연해진다.

profile
개발자준

0개의 댓글