-
함수의 호출 - 함수지향 | 생활코딩Javascript/ECMAScript 2009 (ES5) 2020. 2. 4. 22:38반응형
[출처 : https://opentutorials.org]
함수호출
function func() {} func();
- 함수 func는 Function이라는 객체의 인스턴스다. 따라서 func는 객체 Function이 가지고 있는 메소드들을 상속하고 있다.
function sum(arg1, arg2){ return arg1+arg2; } sum.apply(null, [1,2]) // 3; 'sum(1,2);' 코드와 같음
# apply
- 첫번째 인자는 함수(sum)가 실행될 맥락이다. 두번째 인자는 배열의 담겨있는 원소가 함수(sum)의 인자로 순차적으로 대입
o1 = {val1:1, val2:2, val3:3} o2 = {v1:10, v2:50, v3:100, v4:25} function sum(){ var _sum = 0; for(name in this){ // 1 - for in 문을 이용해서 객체 자신(this)의 값을 열거한 후에 _sum += this[name]; // 2 - 각 속성의 값을 지역변수 _sum에 저장 } return _sum; // 3 - 지역변수를 리턴한다. } alert(sum.apply(o1)) // 6 alert(sum.apply(o2)) // 185
객체 Function의 메소드 apply의 첫번째 인자는 함수가 실행될 맥락이다.
: sum.apply(o1)은 함수 sum을 객체 o1의 메소드로 만들고 sum을 호출한 후에 sum을 삭제한다. (아래와 비슷하다.)
o1.sum = sum; alert(o1.sum()); delete o1.sum();
- sum의 o1 소속의 메소드가 된다는 것은 함수 sum에서 this의 값이 전역객체가 아니라 o1이 된다는 의미다.
- 일반적인 객체지향 언어에서는 하나의 객체에 소속된 함수는 그 객체의 소유물이 된다.
하지만 JavaScript에서 함수는 독립적인 객체로서 존재하고, apply나 call 메소드를 통해서 다른 객체의 소유물인 것처럼 실행할 수 있다.
반응형'Javascript > ECMAScript 2009 (ES5)' 카테고리의 다른 글
생성자와 new - 객체지향 | 생활코딩 (0) 2020.02.08 객체지향 프로그래밍 - 객체지향 | 생활코딩 (0) 2020.02.07 arguments - 함수지향 | 생활코딩 (0) 2020.02.04 클로저 - 함수지향 | 생활코딩 (0) 2020.02.03 값으로서의 함수와 콜백 - 함수지향 | 생활코딩 (0) 2020.02.03