본문 바로가기
문제와 해결/자바스크립트

객체지향 프로그래밍 - 객체와함수,call,bind

by 리양 2021. 10. 25.

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 

 

 

https://falsy.me/javascript-8-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98-call-apply-bind%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B4%85%EB%8B%88%EB%8B%A4/

 

폴시랩

자바스트립트, 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