JS에서 호출, 적용 및 바인딩

안녕하세요 여러분, 이 기사에서 우리는 다음 사항에 대해 논의할 것입니다.

  • 암시적 바인딩, JavaScript의 명시적 바인딩
  • JavaScript에서 메서드를 호출, 적용 및 바인딩하고 서로 어떻게 다른지 설명합니다.

  • 이것은 매우 중요한 개념이며 인터뷰에서 자주 묻는 질문입니다. 따라서 끝까지 읽으십시오.

    암시적 및 명시적 바인딩


    this JS의 키워드는 일반적으로 함수가 속성인 객체를 가리킵니다. 즉, this가 함수를 호출하는 데 사용되는 개체를 참조한다고 말할 수도 있습니다.

    const souvik = {
          learning: true,
          status: "Learning",
          work: function () {
                 console.log(`${this.status} Full Stack Web Dev!`);
          }
    }
    
    souvik.work() //Learning Full Stack Web Dev!
    


    위의 예에서 work() 메서드가 souvik 객체를 사용하여 호출되고 있음을 알 수 있습니다. 점 연산자를 사용하여 메서드를 호출하는 이러한 방법을 암시적 바인딩이라고 합니다. 여기서 this는 메서드가 호출되는 데 사용되는 개체를 나타냅니다.

    동일한 메소드를 재사용하거나 JS에서 call(), apply() 및 bind() 메소드의 도움으로 다른 객체를 사용하여 메소드를 호출하는 다른 방법이 있습니다. 여기서 this 키워드는 다음을 수행할 객체를 가리킵니다. call(), apply() 및 bind() 메서드에 인수로 전달됩니다. 이러한 종류의 메서드 호출을 명시적 바인딩이라고 합니다.

    JS의 this 키워드와 객체에 대해 더 알고 싶으십니까? 이것을 읽으십시오

    call() 메서드는 무엇입니까?



    몇 가지 속성과 기능을 가진 객체가 있다고 가정해 보겠습니다.

    let learning = {
        technology: "JavaScript",
        printActivity: function(){
            console.log("Learning ", this.technology);
        }
    }
    


    개체의 this 키워드는 예제에서 learning 개체 자체를 가리킵니다. printActivity() 함수를 호출하려고 하면 Learning JavaScript 가 인쇄됩니다. 단순한! 오른쪽?

    learning.printActivity(); //Learning JavaScript
    


    이제 다른 학습 활동에 대해 동일한 내용을 인쇄하려면 어떻게 해야 합니까? 우리 마음에 쉽게 오는 한 가지 해결책은 첫 번째 예에서와 같이 새 객체를 만들고 메서드를 호출하는 것입니다.

    let learningSomethingNew = {
        technology: "React",
        printActivity: function(){
            console.log("Learning ", this.technology);
        }
    }
    


    이 시나리오에 대한 다른 최상의 솔루션은 call() 방법을 사용하는 것입니다.

    let learningSomethingNew = {
        technology: "React"
    }
    learning.printActivity.call(learningSomethingNew); //Learning React
    


    이런 식으로 다른 객체에 대해 printActivity 함수를 재사용할 수 있습니다. 그렇기 때문에 여러 시나리오에서 사용할 수 있는 경우 개체의 일부로 만들지 않고 함수를 별도로 작성하는 것이 좋습니다.

    let learning = {
        technology: "JavaScript",
    }
    
    let learningSomethingNew = {
        technology: "React"
    }
    
    function printActivity(){
         console.log("Learning ", this.technology);
    }
    
    printActivity.call(learning); //Learning JavaScript
    printActivity.call(learningSomethingNew); //Learning React
    


    함수에 추가 인수를 전달해야 할 수도 있습니다. 우리도 할 수 있습니다.

    function printActivity(months, days){
         console.log("Learning "+ this.technology + "since " + months + " and " + days);
    }
    
    printActivity.call(learning, 3, 15); //Learning JavaScript since 3 months and 15 days
    printActivity.call(learningSomethingNew, 2, 15); //Learning React since 2 months and 15 days
    


    apply() 메서드는 무엇입니까?


    apply() 방법은 call() 방법과 유사합니다. 유일한 차이점은 apply 메소드는 인수를 배열로 취하는 반면 call 메소드는 인수를 별도로 취한다는 것입니다.

    function printActivity(months, days){
         console.log("Learning "+ this.technology + "since " + months + " and " + days);
    }
    
    printActivity.apply(learning, [3, 15]); //Learning JavaScript since 3 months and 15 days
    printActivity.apply(learningSomethingNew, [2, 15]); //Learning React since 2 months and 15 days
    


    bind() 메서드는 무엇입니까?


    bind() 메서드는 call() 및 apply()와 같은 함수를 호출하지 않고 대신 this 키워드가 인수로 전달되는 객체를 가리키는 함수의 복사본을 반환합니다.

    let learning = {
        technology: "JavaScript",   
    }
    
    function printActivity(){
         console.log("Learning ", this.technology);
    }
    
    let copyOfTheFunction = printActivity.bind(learning); 
    copyOfTheFunction(); //Learning JavaScript
    


    이에 대한 자세한 내용은 call MDN , apply MDN , bind MDN 을 참조하십시오.

    지금까지 읽어주셔서 감사합니다🙏

    이 블로그가 유용하다고 생각되면 네트워크와 공유하고 주제에 대해 의심스러운 점이 있으면 언제든지 의견을 말하십시오.

    GitHub , , 에서 저와 👋를 연결할 수 있습니다.

    좋은 웹페이지 즐겨찾기