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

JavaScript

Kaedah Invokasi Fungsi dalam JavaScript

JavaScript menawarkan beberapa cara untuk menggunakan fungsi, dua daripadanya ialah `Function.prototype.call()` dan `Function.prototype.apply()`. Kedua-dua kaedah berfungsi untuk memanggil fungsi dengan nilai dan argumen `ini` yang ditentukan, tetapi kaedah tersebut berbeza dalam cara argumen ini dihantar.

Artikel ini bertujuan untuk meneroka perbezaan antara `panggilan` dan `mohon`, implikasi prestasinya dan senario yang mungkin lebih disukai daripada yang lain. Pada akhirnya, anda akan mempunyai pemahaman yang lebih jelas tentang masa untuk menggunakan `panggilan` atau `mohon` dalam kod JavaScript anda.

Meneroka Perbezaan Antara `panggil` dan `mohon` 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 Prestasi `call` vs `apply` dalam 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 `mohon` untuk Invocation Fungsi dalam JavaScript

Contoh Bahagian Belakang 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 `mohon` dalam Pembangunan JavaScript

Analisis Prestasi 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');

Insight Lebih mendalam ke dalam panggilan dan gunakan Kaedah dalam JavaScript

Sebagai tambahan kepada penggunaan asas mereka, dan mempunyai beberapa kes penggunaan lanjutan yang boleh meningkatkan pengaturcaraan JavaScript anda. Satu kes penggunaan sedemikian ialah peminjaman kaedah, di mana kaedah dari satu objek dipinjam oleh yang lain. Ini amat berguna apabila anda mempunyai objek yang perlu menggunakan kaedah daripada objek lain tanpa warisan. menggunakan dan apply(), anda boleh meminjam kaedah buat sementara waktu dan melaksanakannya dalam konteks objek yang berbeza, dengan itu meningkatkan kebolehgunaan semula kod dan mengurangkan redundansi.

Satu lagi aspek penting untuk dipertimbangkan ialah penggunaan untuk fungsi variadic—fungsi yang menerima bilangan argumen yang berubah-ubah. Apabila anda mempunyai pelbagai hujah dan anda perlu menghantarnya ke fungsi yang tidak menerima tatasusunan, menjadi sangat berguna. Sebaliknya, boleh berguna dalam senario di mana prestasi adalah kritikal, dan bilangan hujah diketahui dan ditetapkan. Dengan memahami nuansa ini, pembangun boleh membuat keputusan yang lebih termaklum tentang masa untuk digunakan call() lawan , mengoptimumkan kod mereka untuk kebolehbacaan dan prestasi.

  1. Apakah perbezaan utama antara dan ?
  2. menerima hujah secara individu, manakala menerima hujah sebagai tatasusunan.
  3. boleh dan digunakan secara bergantian?
  4. Ya, mereka boleh mencapai hasil yang sama, tetapi pilihan bergantung pada cara hujah distrukturkan.
  5. Bilakah saya lebih suka habis ?
  6. guna apabila anda mempunyai tatasusunan argumen atau bilangan argumen yang berubah-ubah.
  7. Adakah terdapat perbezaan prestasi antara dan ?
  8. Perbezaan prestasi boleh diabaikan dalam kebanyakan kes, tetapi boleh menjadi lebih pantas sedikit dengan bilangan argumen tetap.
  9. Bagaimana caranya dan mengendalikan konteks?
  10. Kedua-dua kaedah secara eksplisit menetapkan konteks untuk seruan fungsi.
  11. Boleh saya guna dan dengan fungsi pembina?
  12. Tidak, ia tidak sesuai untuk fungsi pembina kerana ia tidak mencipta kejadian baharu.
  13. Untuk beberapa kes penggunaan lanjutan untuk apa dan ?
  14. Ia berguna untuk kaedah peminjaman dan pengendalian fungsi variadic.
  15. Bagaimana meningkatkan kebolehbacaan kod?
  16. menjadikan seruan fungsi lebih jelas apabila bilangan hujah diketahui dan ditetapkan.
  17. boleh mengendalikan bilangan hujah yang tidak diketahui?
  18. ya, sesuai untuk fungsi yang perlu mengendalikan bilangan argumen yang berubah-ubah.

Pemikiran Akhir tentang Kaedah Invokasi Fungsi

Kesimpulannya, kedua-duanya dan kaedah adalah alat yang berkuasa dalam JavaScript untuk menggunakan fungsi dengan yang ditentukan nilai. Pilihan di antara mereka bergantung pada cara anda ingin menyampaikan hujah kepada fungsi tersebut. manakala call adalah yang terbaik apabila berurusan dengan bilangan hujah yang tetap, bersinar apabila mengendalikan tatasusunan atau bilangan argumen yang tidak diketahui. Memahami nuansa ini membantu dalam menulis kod yang lebih cekap dan boleh dibaca, akhirnya membawa kepada amalan pengaturcaraan JavaScript yang lebih baik.