Memahami Perbedaan Antara panggilan dan penerapan dalam JavaScript

JavaScript

Metode Pemanggilan Fungsi dalam JavaScript

Dalam JavaScript, fungsi dapat dipanggil dengan berbagai cara, dan dua metode yang umum digunakan adalah `call` dan `apply`. Metode ini memungkinkan Anda mengontrol konteks (nilai `ini`) di mana fungsi dijalankan. Memahami perbedaan antara `call` dan `apply` sangat penting untuk menulis kode JavaScript yang efisien dan efektif.

Artikel ini membahas perbedaan antara `Function.prototype.call()` dan `Function.prototype.apply()` saat memanggil suatu fungsi. Kami akan memeriksa sintaksisnya, kasus penggunaan, dan potensi perbedaan kinerjanya. Di akhir artikel ini, Anda akan memiliki pemahaman yang jelas tentang kapan harus menggunakan `panggil` daripada `melamar` dan sebaliknya.

Memerintah Keterangan
Function.prototype.call() Memanggil fungsi dengan nilai tertentu dan argumen yang diberikan secara individual.
Function.prototype.apply() Memanggil fungsi dengan nilai tertentu, dan argumen diberikan sebagai array.
this Mengacu pada objek asal pemanggilan fungsi, sehingga memungkinkan penetapan konteks dinamis.
console.log() Mencetak pesan atau variabel ke konsol untuk tujuan debugging.
res.writeHead() Menetapkan kode status HTTP dan header respons di server Node.js.
res.end() Mengakhiri proses respons di server Node.js, menandakan bahwa semua data telah terkirim.
http.createServer() Membuat instance server HTTP di Node.js, mendengarkan permintaan masuk.
listen() Memulai server HTTP, mengizinkannya mendengarkan pada port tertentu.

Memahami Penggunaan panggilan dan penerapan dalam JavaScript

Skrip yang disediakan menggambarkan perbedaan antara penggunaan Dan dalam JavaScript. Kedua metode tersebut digunakan untuk memanggil fungsi dengan nilai tertentu konteks. Pada contoh pertama, call() metode digunakan untuk memanggil metode pada objek yang berbeda ( Dan ), meneruskan properti setiap objek sebagai argumen individual. Metode ini memungkinkan sintaks yang ringkas ketika jumlah argumen diketahui dan ditetapkan. Contoh kedua menunjukkan penggunaan apply() metode yang mirip dengan tetapi mengambil serangkaian argumen, bukan argumen individual. Fleksibilitas ini sangat berguna ketika jumlah argumen bervariasi atau berasal dari sumber array.

Dalam contoh backend Node.js, file metode ini digunakan dalam server HTTP yang dibuat dengan . Contoh ini menyoroti bagaimana konteks dapat dimanipulasi dalam JavaScript sisi server untuk merespons permintaan HTTP secara dinamis. Server merespons dengan salam, menunjukkan caranya call() metode dapat mengubah konteks fungsi. Terakhir, contoh gabungan frontend dan backend menunjukkan bagaimana keduanya Dan dapat digunakan dalam fungsi yang lebih dinamis. Dengan menggunakan call() dengan argumen individu dan dengan serangkaian argumen, skrip secara dinamis menghasilkan detail pengguna, menggambarkan penerapan praktis metode ini dalam pengembangan JavaScript sisi klien dan sisi server.

Memanfaatkan Metode panggilan dan penerapan dalam JavaScript untuk Pemanggilan Fungsi

Skrip Bagian Depan JavaScript

// Example 1: Using Function.prototype.call()
const person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
};
const person1 = {
    firstName: "John",
    lastName: "Doe"
};
const person2 = {
    firstName: "Jane",
    lastName: "Smith"
};
// Call the fullName method on person1 and person2
console.log(person.fullName.call(person1)); // Output: John Doe
console.log(person.fullName.call(person2)); // Output: Jane Smith

Menerapkan Function.prototype.apply() untuk Penyampaian Argumen Fleksibel

Skrip Bagian Depan JavaScript

// Example 2: Using Function.prototype.apply()
const person = {
    fullName: function(city, country) {
        return this.firstName + " " + this.lastName + ", " + city + ", " + country;
    }
};
const person1 = {
    firstName: "John",
    lastName: "Doe"
};
const person2 = {
    firstName: "Jane",
    lastName: "Smith"
};
// Apply the fullName method with arguments on person1 and person2
console.log(person.fullName.apply(person1, ["New York", "USA"])); // Output: John Doe, New York, USA
console.log(person.fullName.apply(person2, ["London", "UK"])); // Output: Jane Smith, London, UK

Contoh Backend Node.js Menggunakan panggilan dan penerapan

Skrip Backend JavaScript dengan Node.js

// Load the required modules
const http = require('http');
// Create a server object
http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    // Example using call()
    function greet() {
        return 'Hello ' + this.name;
    }
    const user = { name: 'Alice' };
    res.write(greet.call(user)); // Output: Hello Alice
    res.end();
}).listen(3000);
console.log('Server running at http://localhost:3000/');

Menggabungkan panggilan dan penerapan dengan Fungsi Dinamis

Skrip Tumpukan Penuh JavaScript

// Define a function to display user details
function displayDetails(age, profession) {
    return this.name + " is " + age + " years old and works as a " + profession + ".";
}
// User objects
const user1 = { name: 'Bob' };
const user2 = { name: 'Alice' };
// Use call to invoke displayDetails
console.log(displayDetails.call(user1, 30, 'Engineer')); // Output: Bob is 30 years old and works as a Engineer.
// Use apply to invoke displayDetails
console.log(displayDetails.apply(user2, [28, 'Doctor'])); // Output: Alice is 28 years old and works as a Doctor.

Menjelajahi Manipulasi Konteks dalam JavaScript

Di luar penggunaan dasar Dan , metode ini dapat digabungkan dengan fitur JavaScript lainnya untuk membuat kode yang lebih kompleks dan kuat. Misalnya, mereka sering digunakan bersamaan dengan , yang mengembalikan fungsi baru dengan yang ditentukan this nilai. Berbeda dengan Dan , yang segera memanggil fungsi tersebut, dapat digunakan untuk membuat fungsi terikat yang dapat dipanggil nanti dengan konteks yang konsisten. Hal ini sangat berguna dalam penanganan kejadian, di mana Anda mungkin ingin memastikan suatu fungsi mempertahankan konteks objek tertentu bahkan ketika dijalankan di lingkungan yang berbeda.

Kasus penggunaan tingkat lanjut lainnya melibatkan peminjaman metode dari satu objek untuk digunakan dengan objek lain. Hal ini dapat dicapai dengan menggunakan atau untuk mengikat sementara suatu metode ke objek yang berbeda. Misalnya, metode array seperti atau push() dapat dipinjam dan diterapkan pada objek mirip array seperti objek argumen dalam fungsi. Teknik ini memungkinkan fleksibilitas yang lebih besar dan penggunaan kembali kode, karena memungkinkan metode untuk dibagikan ke berbagai objek tanpa duplikasi.

  1. Apa perbedaan utama antara keduanya Dan ?
  2. Perbedaan utamanya adalah itu menerima daftar argumen, sementara menerima serangkaian argumen.
  3. Kapan sebaiknya Anda menggunakan lebih ?
  4. Kamu harus menggunakan ketika Anda memiliki serangkaian argumen atau perlu meneruskan sejumlah variabel argumen ke suatu fungsi.
  5. Apakah ada perbedaan kinerja antara Dan ?
  6. Secara umum, tidak ada perbedaan kinerja yang signifikan di antara keduanya Dan . Perbedaan apa pun biasanya dapat diabaikan.
  7. Bisa digunakan dengan metode Matematika?
  8. Ya, dapat digunakan untuk meneruskan array angka ke metode Matematika seperti atau .
  9. Apa ?
  10. membuat fungsi baru yang, ketika dipanggil, memiliki fungsinya kata kunci disetel ke nilai yang diberikan, dengan urutan argumen tertentu sebelum argumen apa pun yang disediakan saat fungsi baru dipanggil.
  11. bagaimana bisa digunakan untuk meminjam metode?
  12. Anda dapat gunakan untuk meminjam metode dari satu objek dan menggunakannya pada objek lain, memungkinkan penggunaan kembali metode tanpa menyalin fungsinya.
  13. Apakah mungkin untuk digunakan atau dengan konstruktor?
  14. Tidak, konstruktor tidak dapat dipanggil secara langsung atau . Sebagai gantinya, Anda bisa menggunakan untuk pola pewarisan.
  15. Apa yang dimaksud dengan objek mirip array, dan bagaimana caranya Dan bekerja dengan mereka?
  16. Objek mirip array adalah objek yang memiliki properti panjang dan elemen terindeks. Dan dapat digunakan untuk memanipulasi objek-objek ini seolah-olah mereka adalah array.

Dalam JavaScript, Dan sangat penting untuk mengendalikan konteks dalam fungsi. call() memungkinkan argumen individu untuk disampaikan, sehingga cocok untuk argumen yang diketahui dan tetap. Sebaliknya, mengambil serangkaian argumen, memberikan fleksibilitas untuk daftar argumen variabel. Kedua metode ini meningkatkan penggunaan kembali kode dan pemanggilan fungsi dinamis, baik dalam pengembangan frontend atau lingkungan Node.js. Memahami kapan dan bagaimana menggunakan metode ini secara efektif sangat penting untuk menulis kode JavaScript yang bersih dan efisien.