진스
call, apply, bind 본문
728x90
call, apply, bind 는 함수의 this를 명시적으로 바인딩 할때 사용
call, apply, blind
const gangnam = {
name:"gangnam"
}
const jonglo = {
name:"jonglo"
}
function act(come) {
console.log(this.name, come); // gangnam 들어가
}
act() // "" window.name이 "" 이므로 아래 call로 this를 지정
act.call(gangnam,'들어가') // gangnam 들어가 this를 gangnam객체로 지정
// 함수1개면 this 지정, 2개부턴 함수로 매개변수 전달
function update(count, people) {
this.count = count
this.people = people
}
//call
update.call(gangnam, 30, 20000) // 그냥 전달할때
console.log(gangnam); //{name: 'gangnam', count: 30, people: 20000}
//apply
update.apply(jonglo, [2, 15000]) //배열로 전달할때
console.log(jonglo); //{name: 'jonglo', count: 2, people: 15000}
//작은수 찾기 call,bind 예시
const nums = [15, 7, 6, 2, 9]
const minNum = Math.min(nums) //NaN 숫자만 들어야가되서
const minNum = Math.min(...nums) // 2
const minNum = Math.min.call('',...nums) //2 this는 필요없어서 null
const minNum = Math.min.apply('',nums) //2 array로 전달
//bind 예1
const gangnam = {
name:"gangnam"
}
function update(count, people) {
this.count = count
this.people = people
}
const updateFix = update.bind(gangnam) //const gangnam 로 this 고정
updateFix(30, 100) //update 함수에 값 전달
console.log(gangnam);
//bind 예2
const member = {
name: 'jin',
showName: function () {
console.log(`welcome ${this.name}`);
}
}
member.showName() //welcome jin
let act = member.showName;
act() //welcome act에 할당할때 this를 잃어버림
act.call(member) //welcome jin this를 member로 잡아줌
act.apply(member) //welcome jin call가 마찬가지
//bind 써보기 위해 다른 함수로 만들어봄
let boundAct = act.bind(member) //member에 바인드
boundAct() //welcome jin
728x90
'JavaScript' 카테고리의 다른 글
Class (0) | 2022.05.19 |
---|---|
상속, 프로토타입 (prototype) (0) | 2022.05.19 |
구조분해 할당 , 나머지 매개변수 , 전개구문 (0) | 2022.05.18 |
Array Methods (0) | 2022.05.18 |
문자열 메소드 (String methods) (0) | 2022.05.17 |
Comments