Memahami Perbedaan Antara `call` dan `apply` dalam JavaScript

Memahami Perbedaan Antara `call` dan `apply` dalam JavaScript
JavaScript

Metode Pemanggilan Fungsi dalam JavaScript

JavaScript menawarkan beberapa cara untuk memanggil fungsi, dua di antaranya adalah `Function.prototype.call()` dan `Function.prototype.apply()`. Kedua metode berfungsi untuk memanggil fungsi dengan nilai dan argumen `ini` yang ditentukan, namun keduanya berbeda dalam cara argumen tersebut diteruskan.

Artikel ini bertujuan untuk mengeksplorasi perbedaan antara `call` dan `apply`, implikasi kinerjanya, dan skenario di mana salah satu mungkin lebih disukai dibandingkan yang lain. Pada akhirnya, Anda akan memiliki pemahaman yang lebih jelas tentang kapan harus menggunakan `call` atau `apply` dalam kode JavaScript Anda.

Menjelajahi Perbedaan Antara `call` dan `apply` dalam JavaScript

Contoh Frontend JavaScript

// Example of Function.prototype.call()
const person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
};

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

console.log(person.fullName.call(person1)); // John Doe

Memahami Kinerja `call` vs `apply` di JavaScript

Contoh Frontend JavaScript

// Example of Function.prototype.apply()
const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};

const person2 = {
  firstName: "Jane",
  lastName: "Doe"
};

console.log(person.fullName.apply(person2, ["Oslo", "Norway"])); // Jane Doe, Oslo, Norway

Membandingkan `panggilan` dan `terapkan` untuk Pemanggilan Fungsi di JavaScript

Contoh Backend Node.js

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

const person3 = {
  firstName: "Alice",
  lastName: "Smith"
};

function printName(method) {
  if (method === 'call') {
    console.log(person.fullName.call(person3, 'Paris', 'France'));
  } else if (method === 'apply') {
    console.log(person.fullName.apply(person3, ['Paris', 'France']));
  }
}

printName('call');  // Alice Smith, Paris, France
printName('apply'); // Alice Smith, Paris, France

Memilih Antara `panggilan` dan `terapkan` dalam Pengembangan JavaScript

Analisis Kinerja JavaScript

const iterations = 1000000;
const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};
const person4 = {
  firstName: "Bob",
  lastName: "Brown"
};

console.time('call');
for (let i = 0; i < iterations; i++) {
  person.fullName.call(person4, 'Berlin', 'Germany');
}
console.timeEnd('call');

console.time('apply');
for (let i = 0; i < iterations; i++) {
  person.fullName.apply(person4, ['Berlin', 'Germany']);
}
console.timeEnd('apply');

Wawasan Lebih Dalam tentang panggilan dan penerapan Metode dalam JavaScript

Selain penggunaan dasarnya, Function.prototype.call() Dan Function.prototype.apply() memiliki beberapa kasus penggunaan tingkat lanjut yang dapat meningkatkan pemrograman JavaScript Anda. Salah satu kasus penggunaan tersebut adalah peminjaman metode, dimana metode dari satu objek dipinjam oleh objek lain. Hal ini sangat berguna ketika Anda memiliki objek yang perlu menggunakan metode dari objek lain tanpa pewarisan. Menggunakan call() Dan apply(), Anda dapat meminjam metode untuk sementara dan mengeksekusinya dalam konteks objek yang berbeda, sehingga meningkatkan penggunaan kembali kode dan mengurangi redundansi.

Aspek penting lainnya yang perlu dipertimbangkan adalah penggunaan apply() untuk fungsi variadik—fungsi yang menerima sejumlah argumen yang bervariasi. Saat Anda memiliki array argumen dan Anda harus meneruskannya ke fungsi yang tidak menerima array, apply() menjadi sangat berguna. Di samping itu, call() dapat berguna dalam skenario ketika kinerja sangat penting, dan jumlah argumen diketahui dan diperbaiki. Dengan memahami perbedaan ini, pengembang dapat membuat keputusan yang lebih tepat tentang kapan akan menggunakan call() melawan apply(), mengoptimalkan kodenya untuk keterbacaan dan kinerja.

Pertanyaan yang Sering Diajukan tentang panggilan dan lamaran dalam JavaScript

  1. Apa perbedaan utama antara keduanya call() Dan apply()?
  2. call() menerima argumen secara individual, sementara apply() menerima argumen sebagai array.
  3. Bisa call() Dan apply() digunakan secara bergantian?
  4. Ya, mereka dapat mencapai hasil yang sama, tetapi pilihannya bergantung pada bagaimana argumen disusun.
  5. Kapan saya harus memilih apply() lebih call()?
  6. Menggunakan apply() ketika Anda memiliki serangkaian argumen atau sejumlah argumen yang bervariasi.
  7. Apakah ada perbedaan kinerja antara call() Dan apply()?
  8. Perbedaan kinerja dapat diabaikan dalam banyak kasus, namun call() bisa sedikit lebih cepat dengan jumlah argumen yang tetap.
  9. Bagaimana call() Dan apply() menangani this konteks?
  10. Kedua metode secara eksplisit mengatur this konteks untuk pemanggilan fungsi.
  11. Dapatkah saya menggunakan call() Dan apply() dengan fungsi konstruktor?
  12. Tidak, mereka tidak cocok untuk fungsi konstruktor karena tidak membuat instance baru.
  13. Untuk apa saja kasus penggunaan lanjutan call() Dan apply()?
  14. Mereka berguna untuk peminjaman metode dan menangani fungsi variadik.
  15. Bagaimana call() meningkatkan keterbacaan kode?
  16. call() membuat pemanggilan fungsi lebih jelas ketika jumlah argumen diketahui dan diperbaiki.
  17. Bisa apply() menangani sejumlah argumen yang tidak diketahui?
  18. Ya, apply() sangat ideal untuk fungsi yang perlu menangani sejumlah argumen yang bervariasi.

Pemikiran Akhir tentang Metode Pemanggilan Fungsi

Kesimpulannya, keduanya call Dan apply metode adalah alat yang ampuh dalam JavaScript untuk menjalankan fungsi dengan yang ditentukan this nilai. Pilihan di antara keduanya sangat bergantung pada bagaimana Anda ingin meneruskan argumen ke fungsi. Ketika call yang terbaik ketika berhadapan dengan sejumlah argumen tetap, apply bersinar saat menangani array atau jumlah argumen yang tidak diketahui. Memahami nuansa ini membantu dalam menulis kode yang lebih efisien dan mudah dibaca, yang pada akhirnya mengarah pada praktik pemrograman JavaScript yang lebih baik.