250x250
Notice
Recent Posts
Recent Comments
«   2025/01   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

진스

call, apply, bind 본문

JavaScript

call, apply, bind

입방정 2022. 5. 19. 11:42
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