call, apply, bind 메소드
- call, apply 메소드
- prototype과 class를 이용해서 객체 지향 이해하기
Function.prototype.call( )
현재 어떤 대상에 메서드를 사용하고 싶지만,
해당 값에는 메소드를 사용할 수 없을 때
--> 유사배열에 배열 메서드를 쓰고 싶을 때 형변환을 통해 쓰기보다
call을 사용해서 다른 메서드를 빌려와야 할 때, call을 사용한다.call( ) 메소드는 주어진 this 값, 전달된 인수와 함께 함수를 호출한다.
call( )은 인수 목록을 받는다.
아래의 코드를 작성해서 call( )에 대해 공부해 볼 것이다.
function Person(name, gender) { this.name = name; this.gender = gender; } function Child(name, gender, age, favorite) { // 생성자 연결에 call( )을 사용 // Person 객체의 생성자는 name, gender를 매개변수로 정의한다. // Child는 this, name, gender를 전달하는 Person을 호출하고 있다. // Person은 name과 gender 속성을 초기화하고, Child 함수에서는 age, favoriteChoco를 정의한다. Person.call(this, name, gender); this.age = age; this.favoriteChoco = 'mint chocolate'; } let child1 = new Child('benny', 'female', 7); console.log(`이름: ${child1.name}, 나이: ${child1.gender}, 가장 맛있는 초콜릿: ${child1.favoriteChoco}`);
call( ) 메소드에서 this는 null, undefined는 전역 객체로 대체되고,
원시값은 객체로 변환된다.
call( )는 이미 할당되어 있는 다르 객체의 함수/메서드를 호출하는 해당 객체를 재할당할 때 사용한다.
여기서의 this는 현재 객체(호출하는 객체)를 참조한다.call( )를 사용하면 한 번 작성해 놓은 메소드를 새 객체를 생성해서 사용할 때, 메소드를 새로 만들 필요없이 call( )을 사용해서 다른 객체에 상속이 가능하다.
Function.prototype.apply( )
기본적으로 call과 유사하지만, call처럼 메소드를 빌려오는 것 보다는
배열 요소를 편하게 넣기 위해서 많이 사용한다.spread 배열 펼쳐줄 때, (파마미터의 값을 받아올 때 rest parameter)
Math.max(1, 20, 30, 4); let arr = [1, 20, 30, 4]; // 쉽지 않음 Math.max(null, arr); // 배열이 들어가면 안 되는 함수에 배열을 묶어 넣어줄 때 사용 Math.max(...arr) // spreadSyntax 전개구문을 사용하면 편리하다
apply( ) 메소드는 주어진 this 값, 배열(또는 유사 배열 객체)로 제공되는 arguments로 함수를 호출한다.
apply( )는 인수들의 단일 배열을 전달 받는다.
아래의 코드를 작성해서 apply( ) 에 공부해 볼 것이다.
const numArr = [34, 2, 65, 38, 97, 5, 8, 1]; const maxNum = Math.max.apply(null, numArr); console.log(maxNum); // 97 const minNum = Math.min.apply(null, numArr); console.log(minNum); // 1
apply( )를 사용하면 이미 존재하는 함수를 호출할 때 다른 this의 객체를 할당할 수 있다.
여기서 this는 현재 객체, 호출하는 객체를 참조한다.
apply( )를 사용하면 새로운 객체마다 메소드를 재작성할 필요가 없고,
한 번만 작성해서 다른 객체에 상속시킬 수 있다.
Function.prototype.bind( )
bind( ) 메소드는 함수에 사용 가능한 메소드이다.
this를 바꿔서 새로운 함수를 만들어 준다. 고정하고 싶을 때 사용한다.bind( ) 메소드가 호출되면 새로운 함수를 생성한다.
첫 번째 인자로 받는 값은 value는 this 키워드를 주고, 이어지는 인자들은 바인드된 함수의 인수에 제공된다.아래의 코드를 작성해서 bind( ) 에 공부해 볼 것이다.
function add(num1, num2) { return this + num1 + num2; } let add7 = add.bind(20, 30, 40); console.log(add); console.log(add7); console.log(add7(25, 14));
Author And Source
이 문제에 관하여(call, apply, bind 메소드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jy777hi/day6-prototype-class저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)