Dalam jQuery, noconflict ialah kaedah penting yang digunakan untuk mencegah konflik pembolehubah dan melepaskan kawalan pembolehubah. Kami tahu bahawa jQuery menyediakan dua pembolehubah global kepada dunia luar, $ dan jQuery Walaupun jQuery hanya menghasilkan dua pembolehubah global, konflik hanya akan berlaku dalam kes yang jarang berlaku, tetapi jika halaman web mengandungi lebih banyak perpustakaan kelas, akan berlaku konflik A automatik berlaku apabila mentakrifkan $ atau kewujudan pembolehubah global jQuery.
Fungsi noconflict yang disediakan oleh jQuery menyelesaikan masalah konflik pembolehubah dengan sangat baik, sama ada konflik $ atau jQuery, ia boleh diselesaikan Seterusnya, mari analisa pengendalian konflik jQuery.
Pertama, mari kita lihat pelaksanaan noconflict dalam kod sumber jQuery:
(function(window,undefined){ var // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, jQuery.extend({ noConflict: function( deep ){ if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; } }) }(window)
Di sini jQuery.extend ialah kaedah jQuery untuk memanjangkan sifat statik Ini boleh dilihat sebagai melampirkan kaedah noConflict secara langsung ke jQuery. Di dalam fungsi tanpa nama, tentukan pembolehubah dalaman _jQuery dan _$ masing-masing untuk menyimpan window.jQuery dan window.$ Tujuannya adalah untuk menggunakan pembolehubah dalaman untuk menyelamatkan keadaan kedua-dua pembolehubah global ini sebelum jQuery dijalankan, supaya mereka boleh. digunakan kemudian. Kedua-dua pembolehubah ini dipulihkan dalam operasi anti-perlanggaran. noConflict boleh mengendalikan konflik antara dua pembolehubah $ dan jQuery Ia mengendalikan $ secara lalai Jika parameter benar dimasukkan, konflik jQuery akan dikendalikan.
window.$ === jQuery digunakan untuk menentukan sama ada pembolehubah global adalah sama dengan jQuery Jika ia sama, pembolehubah global $ dipulihkan kepada pembolehubah sebelum jQuery dijalankan (disimpan dalam pembolehubah dalaman _$); window.jQuery === jQuery Apabila pengendalian konflik dalam didayakan dan pembolehubah global jQuery adalah sama dengan jQuery dalaman, jQuery global dipulihkan kepada keadaan sebelumnya. Kepentingan menilai tetingkap.$ === jQuery dan window.jQuery=jQuery adalah untuk melindungi pembolehubah yang ditentukan daripada ditimpa, seperti kod berikut:
//引入jQuery库 var $="String"; var jq=jQuery.noconflict(); var jQuery="This is a line"; var j=jq.noconflict(true); console.log($);//这里如果没有window.$===jQuery这句判断,那么$将会等于undefined而不是"String"。 console.log(jQuery); //同上,如果没有判断window.jQuery===jQuery,重新定义的jQuery就会被undefined覆盖。
Keseluruhan proses operasi ditunjukkan dalam rajah di bawah:
noConflict mengembalikan pembina jQuery di dalam perpustakaan jQuery, gunakannya seperti $!