Rumah > hujung hadapan web > tutorial js > Apakah Perbezaan Antara Kaedah `call()`, `apply()` dan `bind()` JavaScript?

Apakah Perbezaan Antara Kaedah `call()`, `apply()` dan `bind()` JavaScript?

Barbara Streisand
Lepaskan: 2024-12-22 08:17:10
asal
784 orang telah melayarinya

What are the Differences Between JavaScript's `call()`, `apply()`, and `bind()` Methods?

Memahami Perbezaan Kaedah Javascript call(), apply(), dan bind()

Dalam Javascript, panggilan() dan kaedah apply() membolehkan pembangun menentukan konteks (ini) sesuatu fungsi dan lulus hujah. Walaupun kedua-dua kaedah mempunyai tujuan yang sama, ia berbeza dalam cara hujah disediakan kepada fungsi.

Bila Menggunakan bind()?

Kaedah bind() membezakan dirinya sendiri dari call() dan apply() dengan membenarkan anda mencipta fungsi baharu yang mengekalkan konteks fungsi asal. Ini terbukti berharga apabila berurusan dengan panggilan balik atau peristiwa tak segerak.

Pertimbangkan coretan kod berikut:

var obj = {
  x: 81,
  getX: function() {
    return this.x;
  }
};

alert(obj.getX.bind(obj)());
alert(obj.getX.call(obj));
alert(obj.getX.apply(obj));
Salin selepas log masuk

Seperti yang ditunjukkan oleh contoh di atas, bind() mengembalikan fungsi baharu yang, apabila dilaksanakan kemudian , mengekalkan konteks (ini) bagi fungsi asal. Ini memudahkan pemeliharaan konteks dalam panggilan balik tak segerak dan acara.

Penggunaan dalam Acara dan Panggilan Balik Tak Segerak

Kes penggunaan biasa untuk bind() melibatkan pendengar acara, seperti yang dilihat dalam kod di bawah:

function MyObject(element) {
    this.elm = element;

    element.addEventListener('click', this.onClick.bind(this), false);
};

MyObject.prototype.onClick = function(e) {
     var t=this;  //do something with [t]...
    //without bind the context of this function wouldn't be a MyObject
    //instance as you would normally expect.
};
Salin selepas log masuk

Dalam contoh ini, bind() memastikan bahawa kaedah onClick(), apabila dicetuskan oleh peristiwa, mengekalkan konteks contoh MyObject yang memulakan pendengar acara. Tanpa bind(), konteks kaedah onClick() tidak akan menjadi contoh seperti yang dijangkakan.

Pelaksanaan bind()

Tafsiran ringkas bind( ) kaedah boleh dilaksanakan seperti berikut:

Function.prototype.bind = function(ctx) {
    var fn = this;
    return function() {
        fn.apply(ctx, arguments);
    };
};
Salin selepas log masuk

Pelaksanaan yang dipermudahkan ini mencipta fungsi baharu yang memanggil fungsi asal dengan konteks (ctx) dan hujah yang disediakan. Pelaksanaan Function.prototype.bind() asal adalah lebih kompleks, mengendalikan senario tambahan seperti menghantar argumen tambahan.

Atas ialah kandungan terperinci Apakah Perbezaan Antara Kaedah `call()`, `apply()` dan `bind()` JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan