ใน JavaScript วิธีการ call, apply และ bind ใช้เพื่อเปลี่ยนบริบทของฟังก์ชัน หรือเพื่อตั้งค่า this ภายในฟังก์ชัน โดยทั่วไปจะใช้ในสถานการณ์ที่คุณต้องส่งฟังก์ชันเป็นการเรียกกลับ หรือเมื่อคุณต้องการใช้ฟังก์ชันซ้ำกับบริบทหรืออาร์กิวเมนต์ที่แตกต่างกัน

ต่อไปนี้คือตัวอย่างและกรณีการใช้งานแต่ละวิธี:

  1. โทร

เมธอด call ช่วยให้คุณสามารถเรียกใช้ฟังก์ชันที่มีค่า this ที่ระบุและอาร์กิวเมนต์ที่ระบุแยกกัน

ตัวอย่าง:

const person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}

const person1 = {
  firstName: "John",
  lastName: "Doe"
}

const person2 = {
  firstName: "Mary",
  lastName: "Smith"
}

console.log(person.fullName.call(person1)); // Output: "John Doe"
console.log(person.fullName.call(person2)); // Output: "Mary Smith"

ในตัวอย่างข้างต้น เมธอด call ใช้เพื่อเรียกใช้ฟังก์ชัน fullName โดยมี person1 และ person2 เป็นค่า this

กรณีการใช้งาน:

call สามารถใช้เพื่อเรียกใช้ฟังก์ชันที่มีบริบทเฉพาะได้ ซึ่งจะมีประโยชน์เมื่อคุณมีฟังก์ชันที่ขึ้นอยู่กับบริบทเฉพาะ ตัวอย่างเช่น คุณอาจมีฟังก์ชันที่ทำงานบนวัตถุเฉพาะ และคุณต้องการเรียกใช้ฟังก์ชันนั้นด้วยวัตถุที่แตกต่างกัน

<แข็งแกร่ง>2. สมัคร

เมธอด apply คล้ายกับ call แต่ใช้อาร์เรย์ของอาร์กิวเมนต์ แทนที่จะใช้อาร์กิวเมนต์ที่ให้แยกกัน

ตัวอย่าง:

const numbers = [5, 6, 2, 3, 7];

const max = Math.max.apply(null, numbers);

console.log(max); // Output: 7

ในตัวอย่างข้างต้น ใช้เมธอด apply เพื่อค้นหาค่าสูงสุดในอาร์เรย์ของตัวเลข

กรณีการใช้งาน:

apply สามารถใช้เพื่อเรียกใช้ฟังก์ชันที่มีอาร์เรย์ของอาร์กิวเมนต์ได้ ซึ่งจะมีประโยชน์เมื่อคุณมีฟังก์ชันที่รับอาร์กิวเมนต์จำนวนตัวแปร ตัวอย่างเช่น คุณอาจมีฟังก์ชันที่รับอาร์กิวเมนต์เป็นจำนวนเท่าใดก็ได้ และคุณต้องการเรียกฟังก์ชันนั้นด้วยอาร์เรย์อาร์กิวเมนต์

3.ผูกมัด

เมธอด bind ส่งคืนฟังก์ชันใหม่ที่มีค่า this และอาร์กิวเมนต์ที่ระบุ

ตัวอย่าง:

const person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}

const person1 = {
  firstName: "John",
  lastName: "Doe"
}

const person2 = {
  firstName: "Mary",
  lastName: "Smith"
}

const fullName1 = person.fullName.bind(person1);
const fullName2 = person.fullName.bind(person2);

console.log(fullName1()); // Output: "John Doe"
console.log(fullName2()); // Output: "Mary Smith"

ในตัวอย่างข้างต้น เมธอด bind ใช้เพื่อสร้างฟังก์ชันใหม่ 2 ฟังก์ชัน fullName1 และ fullName2 ที่ผูกไว้กับ person1 และ person2 ตามลำดับ

กรณีการใช้งาน:

bind สามารถใช้เพื่อสร้างฟังก์ชันใหม่ที่ถูกผูกไว้กับบริบทเฉพาะ สิ่งนี้มีประโยชน์เมื่อคุณมีฟังก์ชันที่ต้องเรียกใช้ด้วยบริบทเฉพาะ แต่คุณไม่ต้องการเปลี่ยนฟังก์ชันดั้งเดิม ตัวอย่างเช่น คุณอาจมีฟังก์ชันที่ใช้ในหลายบริบท และคุณต้องการสร้างฟังก์ชันใหม่สำหรับแต่ละบริบท