JavaScript

[Javascript] 함수의 호출(apply)

vhxpffltm 2019. 5. 27. 21:25

이 내용은 '생활코딩'에서 공부한 내용을 정리한 글이다. 

자세한 내용은 https://www.opentutorials.org/course/743 이곳에서 확인할 수 있다. 

모든 내용의 출처는 이곳이다. 다른 언어를 알고있는 상태로 공부한 내용이다.

 

JavaScript는 함수를 호출하는 특별한 방법을 제공한다. 함수는 객체이며 후에 말하겠지만, 자바스크립트에서 불리언, 문자열, 숫자, null, undefined가 아니면 모두 객체이다. 예제에서 함수 sum은 Function 객체의 인스턴스이다. 이 때문에 객체, Function의 메소드 apply를 호출 할 수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!DOCTYPE html>
<html>
    <body>
        <script>
            
            //함수 = 일종의 객체, 객체는 속성을 가진다. 속성이 함수를 가진다면 그것을 메서드
            function sum(arg1, arg2){
                return arg1+arg2;
            }
            //sum : 함수이며 메서드를 가진다, '.'하고 뒤에 있는것, .apply - sum이라는 함수 객체의 메서드이다.
            //apply(null, [1,2]) 두번쨰 인자가 원래 배열의 인자로 사용, 
 
            var a = { val1: 1, val2: 2, val3: 3, sum : sum};
            var b = { v1: 10, v2: 5, v3: 100, v4: 4, sum : sum };
            function sum() {
                var s = 0;
                for (name in this) {
                    if (typeof this[name!= 'function'//객체안에 함수sum이 들어있기 때문 
                    s += this[name];
                } //this는 호출할때 정해짐, 호출한 객체가 들어감
                return s;
            }
            document.write(sum.apply(a) + '<br />');
            document.write(sum.apply(b) + '<br />');
           
        </script>
    </body>
</html>
 
 

 

a,b 하는 객체가 있고 파라미터를 받지 않는 함수 sum이 있다. 그리고 객체 자신의 값을 열거하여 s라는 변수에 값을 저장하고 리턴하고 있다. 

 

sum.apply에서 sum은 a라는 객체의 메서드가 된다는 것은 함수 sum에서 this의 값이 전역객체가 아니라 a가 된다는 것이다. 그래서 함수 sum에서 this는 객체 a를 가지게 된다.

 

*인자를 얼마 넣을 지 모를 때 사용하는 메소드가 apply

 

그 외, 다른 Function의 다른 메서드나 apply에 대해 더 자세하게 알고 싶다면 자바스크립트 래퍼런스를 찾아보자.

'JavaScript' 카테고리의 다른 글

[JavaScript]생성자와 new  (0) 2019.05.27
[JavaScript] Closure_클로저  (0) 2019.05.27
[JavaScript] arguments 객체  (0) 2019.05.19
[JavaScript] 변수의 유효범위  (0) 2019.05.19
[JavaScript] 객체  (0) 2019.05.08