함수를 실행하는 다양한 방법
function add (x,y) {
this.val = x + y;
console.log(this.val);
}
let obj = { val : 0 };
let boundFn = add.bind(obj,2,8); // boundFn은 함수
boundFn() // 10, add는 여기서 실행된다. 일반적인 function (method)호출처럼 보이지만, 여기엔 this 값이 이미 바인됭되어 있다.
let arr = [7, 35, 2, 8, 21];
이 배열중 가장 작은 값을 Math.mi을 이용해 얻어내려면 ?
let minimum = Math.min.apply (null, arr); // this값이 의미가 없으므로 null로 넘겨도된다. Math는 constructor가 아니므로, 실행 context가 없다.
console.log(minumum);
call 또는 apply를 이용해 주체가 되는 인스턴스와 메소드의 순서를 바꿀 수 있다.
function moreThanFive(element) {
return element.length > 5;
}
let arr = ['code', 'states'];
arr.filter(moreThanFive); // 인스턴스(arr)가 먼저 등장하고, 메소드(filter)가 뒤에 등장
// ['states']
Array.prototype.filter.call(arr.moreThanFive); // 메소드가 먼저 등장, 인스턴스 나중
// ['states']