apply
apply는 함수의 메서드이다. JavaScript에서 함수는 객체로 취급되며, 이는 함수가 프로퍼티와 메서드를 가질 수 있다는 것을 의미한다. 따라서 함수는 다른 객체와 마찬가지로 this 컨텍스트를 설정할 수 있으며, apply 메서드를 사용하여 특정 객체를 this로 설정하고, 배열 형태의 인자를 전달하여 호출할 수 있다.
apply 사용법
functionName.apply(thisArg, [argsArray]);
thisArg: 함수가 호출될 때 사용할 this 값이다. 이 값은 함수 내부에서 this로 참조된다.
argsArray: 함수에 전달할 인자들을 포함하는 배열이다. 이 배열의 요소들이 함수의 매개변수로 전달된다.
apply 예제
function introduce(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: '신짱구' };
//apply를 사용하여 person을 this로 설정하고 인자를 배열로 전달
introduce.apply(person, ['Hello', '!']); //출력: Hello, 신짱구!
apply 특징
배열 형태의 인자: apply는 인자를 배열로 전달해야 하므로, 여러 개의 인자를 한 번에 전달할 수 있다.
다양한 상황에서 사용: apply는 배열을 인자로 받는 함수에 유용하게 사용될 수 있다. 예를 들어, Math.max와 같은 함수에 배열의 최대값을 구할 때 사용할 수 있다.
const numbers = [1, 2, 3, 4, 5];
//apply를 사용하여 배열의 최대값을 구함
const maxNumber = Math.max.apply(null, numbers);
console.log(maxNumber); //출력: 5
call
call은 함수의 메서드이다. JavaScript에서 함수는 객체로 취급되며, 이는 함수가 프로퍼티와 메서드를 가질 수 있다는 것을 의미한다. 따라서 함수는 다른 객체와 마찬가지로 this 컨텍스트를 설정할 수 있으며, call 메서드를 사용하여 특정 객체를 this로 설정하고, 개별적인 인자를 전달하여 호출할 수 있다.
call 사용법
functionName.call(thisArg, arg1, arg2, ...);
thisArg: 함수가 호출될 때 사용할 this 값이다. 이 값은 함수 내부에서 this로 참조된다.
arg1, arg2, ...: 함수에 전달할 인자들이다. 인자를 개별적으로 나열하여 전달한다.
call 예제
function introduce(greeting, punctuation) {
console.log(greeting + ', ' + this.name + punctuation);
}
const person = { name: '신짱아' };
//call을 사용하여 person을 this로 설정하고 인자를 개별적으로 전달
introduce.call(person, 'Hi', '!');
//출력: Hi, 신짱아!
call 특징
개별 인자 전달: call은 인자를 개별적으로 전달해야 하므로, 인자의 수가 정해져 있을 때 유용하다.
다양한 상황에서 사용: call은 특정 객체의 메서드를 다른 객체에서 호출할 때 유용하게 사용될 수 있다.
const obj1 = {
value: 10,
showValue: function() {
console.log(this.value);
}
};
const obj2 = {
value: 20
};
//obj2의 showValue 메서드를 obj1의 this로 호출
obj1.showValue.call(obj2); //출력: 20
요약
apply 메서드
함수를 호출할 때 this 값을 설정하고, 인자를 배열 형태로 전달한다. 주로 this를 특정 객체로 설정해야 할 때와, 배열의 요소를 함수의 인자로 전달해야 할 때 유용하다.
call 메서드
함수를 호출할 때 this 값을 설정하고, 인자를 개별적으로 전달한다. 주로 this를 특정 객체로 설정해야 할 때와, 인자의 수가 정해져 있을 때 유용하다.
'Language > JavaScript' 카테고리의 다른 글
[JS]Object 객체 (0) | 2025.01.17 |
---|---|
[JS]this (0) | 2025.01.14 |
[JS]arguments 객체 (0) | 2025.01.10 |
[JS]let, const, var (0) | 2024.12.30 |
[JS]템플릿 리터럴(Template Literal) (1) | 2024.12.24 |