14_함수 ([5]call 및 apply 방법)

1603 단어 callapply
모든 함수는 두 가지 비계승적인 방법을 포함한다:call,apply.이 두 방법의 용도는 모두 특정한 작용역에서 함수를 호출하는 것으로 실제로는 함수 체내this대상의 값을 설정하는 것과 같다.
//call apply :     
function sum(x, y){
    return x + y;
}

function call1(num1, num2){
    return sum.call(this, num1, num2);
}

function apply1(num1, num2){
    return sum.apply(this, [num1, num2]);
}

console.info(call1(10, 20));
console.info(apply1(20, 30));

call, apply의 용도 중 하나는 매개 변수를 전달하는 것이지만, 사실상 그들의 진정한 강력한 방식은 함수를 확장하여 운행하는 작용역을 확장할 수 있다.call (), aplly () 를 사용하여 작용역을 확장하는 가장 큰 장점은 대상이 방법과 어떠한 결합도 필요로 하지 않는다는 것이다
// 
var color = "red"; // window.color
var obj = {color : "blue"};
var obj2 = {color : "yellow"};

function showColor(){
    console.info(this.color);
}

showColor.call(this); //red  showColor.call(window);
showColor.call(obj); //blue 
showColor.call(obj2); //yellow

call 방법 간단한 실현
//call ,apply call 
// function 
function fn(a, b){
    return a + b;
}

// 
function Obj(x, y){
    this.x = x;
    this.y = y;
}

var o = new Obj(10, 20);
console.info(o); // Obj { x=10, y=20}

o.fn = fn;
console.info(o);
var result = o.fn(o.x, o.y); // Obj { x=10, y=20, fn=fn()}
delete o.fn;
console.info(o); // Obj { x=10, y=20}
console.info(result); //30

console.info(fn.call(o, o.x, o.y)); //30  

팁:
그룹의 최대 또는 최소 값을 찾으려면 아래와 같이 apply () 방법을 사용할 수 있습니다.
var values = [1, 2, 3, 4, 5, 6, 7, 8];
var max = Math.max.apply(Math, values);

이 기교의 관건은 Math 대상을 apply () 의 첫 번째 매개 변수로 삼아this 값을 정확하게 설정하는 것이다.그리고 모든 그룹을 두 번째 매개 변수로 사용할 수 있습니다.

좋은 웹페이지 즐겨찾기