Call() 과 bind() 를 사용해서 평범한 함수를 객체의 메소드로 사용할 수 있다.
call()
메소드로 쓸 함수.call(호출에 제공되는 this의 값,인자1,인자2,..)
var kim = {name:'kim', first:10, second:20}
var lee = {name:'lee', first:10, second:10}
function sum(prefix){
return prefix+(this.first+this.second);
}
//sum()에 쓰일 this값은 kim
console.log("sum.call(kim)", sum.call(kim, '=> ')); // 결과 : sum.call(kim)=>30
//sum()에 쓰일 this값은 lee
console.log("lee.call(kim)", sum.call(lee, ': ')); // 결과 : sum.call(kim)=>20
bind()
call과 aplye 는 함수 호출과 동시에 함수 실행한다.
하지만 bind() 함수를 실행하지 않고 바인딩된 새로운 함수를 만든다.
function fnc(prop) {
return this[prop];
}
const callObj = {
hello: 'world'
};
const callValue = fnc.call(callObj, 'hello');
//call() 은 바로 함수를 호출한다
console.log(callValue);
// 'world';
//bind() 는 this가 바인딩된 새로운 함수를 만든다.
const bindValue = fnc.bind(callObj, 'hello');
console.dir(bindValue);
//fnc(prop) {
// return this[prop];
//}
// 바인딩된 함수 실행
console.log(bindValue());
// 'world'
https://www.youtube.com/watch?v=wOiteGyan-I&list=PLuHgQVnccGMAMctarDlPyv6upFUUnpSO3&index=25
폴시랩
자바스트립트, PHP, 워드프레스, HTML, CSS, 팁, 가이드, 일상이야기.
falsy.me
'문제와 해결 > 자바스크립트' 카테고리의 다른 글
마우스 스크롤 좌우 이동 (0) | 2022.05.11 |
---|---|
엔터키 이벤트가 먼저 실행이 안될때 (0) | 2021.08.03 |
breadcrumbs 만들기 (0) | 2021.08.02 |
리턴값이 함수일 때 주의점 (0) | 2021.07.06 |
이벤트 (0) | 2021.05.13 |