cari
Rumahhujung hadapan webtutorial jskaedah &#this', call(), apply() dan bind() dalam JavaScript - dijelaskan secara ringkas

Mempelajari kaedah call(), apply(), dan bind() adalah penting kerana kaedah ini membolehkan anda mengawal konteks ini dalam JavaScript. Dalam situasi di mana kelakuan lalai ini tidak berfungsi seperti yang dijangkakan, seperti semasa meminjam kaedah daripada satu objek ke objek lain atau mengekalkan konteks yang betul dalam panggilan balik, kaedah ini memberikan fleksibiliti dan kawalan. Dengan menguasainya, anda boleh menulis fungsi yang lebih cekap, boleh digunakan semula dan peka konteks, yang amat berguna dalam aplikasi yang kompleks.

sebelum kita memasuki kaedah call(), apply() dan bind(), mari kita fahami kata kunci 'ini' dan mekanismenya.

Kata kunci 'ini'

Mari kita fahami bila dan perkara yang dirujuk oleh kata kunci ini dengan titik tumpu berikut di sini:

  • Dalam kaedah objek, ini merujuk kepada objek. Di dalam kaedah yang ditakrifkan dalam objek, ini akan menunjukkan kepada objek yang memiliki kaedah tersebut.

  • Dalam fungsi biasa, ini merujuk kepada objek global. Dalam mod tidak ketat, jika fungsi digunakan dalam konteks global (bukan sebagai kaedah objek), ini merujuk kepada objek global (tetingkap dalam penyemak imbas).

  • Dalam fungsi mod ketat, ini tidak ditentukan. Jika fungsi itu bukan kaedah objek dan tidak terikat pada konteks tertentu (melalui panggilan, gunakan atau ikat), ini tidak akan ditentukan dalam mod ketat.

  • Dalam pengendali acara, ini merujuk kepada elemen yang menerima acara. Apabila peristiwa dicetuskan, ini merujuk kepada elemen HTML yang menggunakan acara tersebut.

    <button onclick="this.style.display='none'">
      Click to Remove Me!
    </button>
    

    Dalam kes ini, ini merujuk kepada elemen butang itu sendiri yang menerima acara onclick.

Dalam fungsi anak panah, ini berkelakuan berbeza. Fungsi anak panah tidak mempunyai konteks ini sendiri. Sebaliknya, ini diwarisi secara leksikal daripada skop sekeliling pada masa fungsi anak panah dicipta. Ini bermakna ini di dalam fungsi anak panah akan merujuk kepada nilai ini bagi fungsi atau konteks lampirannya.

const person = {
  name: "Alice",
  greet: function() {
    setTimeout(() => {
      console.log(`Hi, I'm ${this.name}`);
    }, 1000);
  }
};

person.greet(); // Output: Hi, I'm Alice

Dalam kes ini, fungsi anak panah di dalam setTimeout mewarisi ini daripada kaedah salam, yang menunjuk kepada objek orang.

kaedah panggilan().

Kaedah call() membolehkan anda "meminjam" fungsi atau kaedah daripada satu objek dan menggunakannya dengan objek lain dengan menghantar objek lain sebagai hujah pertama. Argumen pertama menjadi nilai ini di dalam fungsi dan argumen tambahan menyusuli selepasnya.

Kaedah call() tidak mencipta fungsi baharu; ia menjalankan fungsi sedia ada dengan konteks dan hujah yang disediakan.

const person = {
  fullName: function(city, country) {
    console.log(this.firstName + " " + this.lastName + " is going to " + city + ", " + country + ".");
  }
}

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

person.fullName.call(person1, "Oslo", "Norway");
// Output: John Doe is going to Oslo, Norway.

Dalam contoh ini, call() digunakan untuk melaksanakan kaedah Nama penuh orang dengan data person1 (Nama depan dan Nama akhir), dan hujah tambahan ialah "Oslo" dan "Norway".

apply() Kaedah

Kaedah apply() sangat serupa dengan kaedah call(). Perbezaan utama terletak pada cara hujah dihantar ke fungsi. Dengan apply(), anda menghantar argumen sebagai tatasusunan (atau objek seperti tatasusunan), bukannya secara individu.

Seperti call(), kaedah apply() tidak mencipta fungsi baharu. Ia segera melaksanakan fungsi dengan konteks yang disediakan (nilai ini) dan argumen.

const person = {
  fullName: function(city, country) {
    console.log(this.firstName + " " + this.lastName + " is going to " + city + ", " + country + ".");
  }
}

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

person.fullName.apply(person1, ["Oslo", "Norway"]);
// Output: John Doe is going to Oslo, Norway.

Dalam contoh ini, apply() digunakan untuk memanggil kaedah Nama penuh objek orang, tetapi dengan konteks (ini) orang1. Argumen "Oslo" dan "Norway" dihantar sebagai tatasusunan.

bind() Kaedah

Kaedah bind() dalam JavaScript membolehkan anda menetapkan konteks (nilai ini) untuk fungsi atau kaedah, sama seperti call() dan apply(). Walau bagaimanapun, tidak seperti call() dan apply(), kaedah bind() tidak menggunakan fungsi tersebut dengan serta-merta. Sebaliknya, ia mengembalikan fungsi baharu dengan set nilai ini kepada objek yang anda tentukan.

const person = {
  fullName: function(city, country) {
    console.log(this.firstName + " " + this.lastName + " is going to " + city + ", " + country + ".");
  }
}

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

const func = person.fullName.bind(person1);
func("Oslo", "Norway");
// Output: John Doe is going to Oslo, Norway.

Dalam contoh ini, bind() mencipta fungsi fungsi baharu dengan nilai ini ditetapkan kepada person1. Fungsi ini tidak dipanggil serta-merta, tetapi anda boleh memanggilnya kemudian, menghantar argumen "Oslo" dan "Norway".

Contoh: Logger Berpusat dengan Pelbagai Konteks

Berikut ialah contoh aplikasi yang kecil tetapi kompleks di mana menggunakan call(), apply(), atau bind() membawa kecekapan—terutamanya dalam pengendalian aplikasi separa fungsi untuk tujuan pengelogan:

Katakan anda mempunyai fungsi pengelogan berpusat yang merekodkan maklumat tentang pengguna yang berbeza yang melakukan tindakan. Menggunakan bind() membolehkan anda menetapkan konteks ini kepada pengguna yang berbeza dengan cekap, mengelakkan kod berulang.

const logger = {
  logAction: function(action) {
    console.log(`${this.name} (ID: ${this.id}) performed: ${action}`);
  }
};

const user1 = { name: "Alice", id: 101 };
const user2 = { name: "Bob", id: 202 };

// Create new logger functions for different users
const logForUser1 = logger.logAction.bind(user1);
const logForUser2 = logger.logAction.bind(user2);

// Perform actions without manually passing user context
logForUser1("login");
// Output: Alice (ID: 101) performed: login

logForUser2("purchase");
// Output: Bob (ID: 202) performed: purchase

Mengapa Ia Cekap:

Penggunaan Semula Konteks: Anda tidak perlu melepasi konteks pengguna secara manual setiap kali anda melog tindakan. Konteks (ini) diikat sekali, dan pembalakan menjadi boleh diguna semula dan bersih.

Modulariti: Jika anda perlu menambah lebih ramai pengguna atau tindakan, anda boleh mengikat mereka dengan cepat pada pembalak tanpa mengubah fungsi itu sendiri, memastikan kod anda KERING (Jangan Ulangi Sendiri).

Atas ialah kandungan terperinci kaedah &#this', call(), apply() dan bind() dalam JavaScript - dijelaskan secara ringkas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Rangka Kerja JavaScript: Menguasai Pembangunan Web ModenRangka Kerja JavaScript: Menguasai Pembangunan Web ModenMay 02, 2025 am 12:04 AM

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Hubungan antara JavaScript, C, dan penyemak imbasHubungan antara JavaScript, C, dan penyemak imbasMay 01, 2025 am 12:06 AM

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr

Aliran node.js dengan typescriptAliran node.js dengan typescriptApr 30, 2025 am 08:22 AM

Node.js cemerlang pada I/O yang cekap, sebahagian besarnya terima kasih kepada aliran. Aliran memproses data secara berperingkat, mengelakkan beban memori-ideal untuk fail besar, tugas rangkaian, dan aplikasi masa nyata. Menggabungkan sungai dengan keselamatan jenis typescript mencipta powe

Python vs JavaScript: Pertimbangan Prestasi dan KecekapanPython vs JavaScript: Pertimbangan Prestasi dan KecekapanApr 30, 2025 am 12:08 AM

Perbezaan prestasi dan kecekapan antara Python dan JavaScript terutamanya dicerminkan dalam: 1) sebagai bahasa yang ditafsirkan, Python berjalan perlahan tetapi mempunyai kecekapan pembangunan yang tinggi dan sesuai untuk pembangunan prototaip pesat; 2) JavaScript adalah terhad kepada benang tunggal dalam penyemak imbas, tetapi I/O multi-threading dan asynchronous boleh digunakan untuk meningkatkan prestasi dalam node.js, dan kedua-duanya mempunyai kelebihan dalam projek sebenar.

Asal JavaScript: Meneroka Bahasa PelaksanaannyaAsal JavaScript: Meneroka Bahasa PelaksanaannyaApr 29, 2025 am 12:51 AM

JavaScript berasal pada tahun 1995 dan dicipta oleh Brandon Ike, dan menyedari bahasa itu menjadi C. 1.C Language menyediakan keupayaan pengaturcaraan prestasi tinggi dan sistem untuk JavaScript. 2. Pengurusan memori JavaScript dan pengoptimuman prestasi bergantung pada bahasa C. 3. Ciri lintas platform bahasa C membantu JavaScript berjalan dengan cekap pada sistem operasi yang berbeza.

Di sebalik tabir: Apa bahasa JavaScript?Di sebalik tabir: Apa bahasa JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript berjalan dalam penyemak imbas dan persekitaran Node.js dan bergantung pada enjin JavaScript untuk menghuraikan dan melaksanakan kod. 1) menjana pokok sintaks abstrak (AST) di peringkat parsing; 2) menukar AST ke bytecode atau kod mesin dalam peringkat penyusunan; 3) Laksanakan kod yang disusun dalam peringkat pelaksanaan.

Masa Depan Python dan JavaScript: Trend dan RamalanMasa Depan Python dan JavaScript: Trend dan RamalanApr 27, 2025 am 12:21 AM

Trend masa depan Python dan JavaScript termasuk: 1. Kedua -duanya akan terus mengembangkan senario aplikasi dalam bidang masing -masing dan membuat lebih banyak penemuan dalam prestasi.

Python vs JavaScript: Persekitaran dan Alat PembangunanPython vs JavaScript: Persekitaran dan Alat PembangunanApr 26, 2025 am 12:09 AM

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini