Saya baru memulai dengan menulis plugin jQuery. Saya menulis tiga plugin kecil tetapi saya hanya menyalin garis ke semua plugin saya tanpa benar-benar tahu apa artinya. Bisakah seseorang memberi tahu saya lebih banyak tentang ini? Mungkin suatu penjelasan akan berguna suatu hari nanti ketika menulis suatu kerangka :)
Apa fungsinya? (Saya tahu itu meluas jQuery entah bagaimana tetapi apakah ada hal lain yang menarik untuk diketahui tentang ini)
(function($) {
})(jQuery);
Apa perbedaan antara dua cara penulisan plugin berikut:
Tipe 1:
(function($) {
$.fn.jPluginName = {
},
$.fn.jPluginName.defaults = {
}
})(jQuery);
Tipe 2:
(function($) {
$.jPluginName = {
}
})(jQuery);
Tipe 3:
(function($){
//Attach this new method to jQuery
$.fn.extend({
var defaults = {
}
var options = $.extend(defaults, options);
//This is where you write your plugin's name
pluginname: function() {
//Iterate over the current set of matched elements
return this.each(function() {
//code to be inserted here
});
}
});
})(jQuery);
Saya bisa saja jauh dari sini dan mungkin semua memiliki arti yang sama. Saya bingung. Dalam beberapa kasus, ini tampaknya tidak berfungsi dalam sebuah plugin yang saya tulis menggunakan Tipe 1. Sejauh ini, Tipe 3 tampaknya paling elegan bagi saya, tetapi saya juga ingin tahu tentang yang lain.
sumber
(function($) { })(jQuery);
membungkus kode sehingga$
adajQuery
di dalam penutupan itu, bahkan jika$
berarti sesuatu yang lain di luar itu, biasanya sebagai hasil dari$.noConflict()
misalnya. Ini memastikan plugin Anda berfungsi, baik$ === jQuery
:)(function($) { })(jQuery)
Anda berkata: "Saya tahu itu meluas jQuery entah bagaimana [...]". Jelas Anda tidak tahu karena pernyataan Anda 100% salah. Ngomong-ngomong itu bisa menyesatkan pembaca masa depan. Lihatlah ini: stackoverflow.com/a/32550649/1636522 .Jawaban:
Pertama, blok kode yang terlihat seperti
(function(){})()
hanyalah fungsi yang dijalankan di tempat. Mari kita jabarkan sedikit.Baris 2 adalah fungsi sederhana, dibungkus dengan tanda kurung untuk memberitahu runtime untuk mengembalikan fungsi ke lingkup induk, setelah itu kembali fungsi dieksekusi menggunakan baris 4, mungkin membaca langkah-langkah ini akan membantu
Anda dapat melihat bahwa 1 adalah deklarasi, 2 mengembalikan fungsi dan 3 hanya menjalankan fungsi.
Contoh bagaimana itu akan digunakan.
Adapun pertanyaan lain tentang plugin:
Tipe 1: Ini bukan plugin yang sebenarnya, ini adalah objek yang dilewatkan sebagai fungsi, karena plugin cenderung berfungsi.
Tipe 2: Ini lagi-lagi bukan plugin karena tidak memperpanjang
$.fn
objek. Ini hanyalah pengembangan dari inti jQuery, meskipun hasilnya sama. Ini jika Anda ingin menambahkan fungsi traverse seperti toArray dan sebagainya.Tipe 3: Ini adalah metode terbaik untuk menambahkan plugin, prototipe tambahan dari jQuery mengambil objek yang menyimpan nama dan fungsi plugin Anda dan menambahkannya ke pustaka plugin untuk Anda.
sumber
( function(){} )
: Apa sebenarnya ini? Bisakah saya tidak menulis sajafunction(){}()
?Pada tingkat paling dasar, sesuatu dari bentuk
(function(){...})()
adalah fungsi literal yang dieksekusi segera. Artinya, Anda telah mendefinisikan suatu fungsi dan Anda segera memanggilnya.Formulir ini berguna untuk menyembunyikan informasi dan enkapsulasi karena apa pun yang Anda tetapkan di dalam fungsi itu tetap lokal untuk fungsi itu dan tidak dapat diakses dari dunia luar (kecuali Anda secara khusus mengeksposnya - biasanya melalui objek yang dikembalikan secara literal).
Variasi bentuk dasar ini adalah apa yang Anda lihat di plugin jQuery (atau dalam pola modul ini secara umum). Karenanya:
Yang berarti Anda menyampaikan referensi ke
jQuery
objek yang sebenarnya , tetapi itu dikenal sebagai$
dalam lingkup fungsi literal.Tipe 1 sebenarnya bukan plugin. Anda hanya menugaskan objek literal
jQuery.fn
. Biasanya Anda menetapkan fungsijQuery.fn
sebagai plugin biasanya hanya fungsi.Tipe 2 mirip dengan Tipe 1; Anda tidak benar-benar membuat plugin di sini. Anda cukup menambahkan objek literal ke
jQuery.fn
.Tipe 3 adalah plugin, tetapi itu bukan cara terbaik atau termudah untuk membuatnya.
Untuk memahami lebih lanjut tentang ini, lihatlah pertanyaan dan jawaban yang serupa ini . Juga, halaman ini membahas beberapa detail tentang pembuatan plugin.
sumber
Sedikit bantuan:
sumber
Hanya tambahan kecil untuk penjelasan
Struktur
(function() {})();
ini disebut IIFE (Ekspresi Fungsi Segera Diminta), itu akan dieksekusi segera, ketika penerjemah akan mencapai garis ini. Jadi saat Anda menulis baris ini:ini berarti, bahwa juru bahasa akan memanggil fungsi segera, dan akan lulus
jQuery
sebagai parameter, yang akan digunakan di dalam fungsi sebagai$
.sumber
Sebenarnya, contoh ini membantu saya memahami apa
(function($) {})(jQuery);
artinya.Pertimbangkan ini:
Dan sekarang pertimbangkan ini:
jQuery
adalah objek holding jQuery variabel.$
adalah nama variabel seperti yang lain (a
,$b
,a$b
dll) dan tidak memiliki arti khusus seperti di PHP.Mengetahui bahwa kita dapat melihat contoh kita:
sumber
Tipe 3, agar dapat berfungsi harus terlihat seperti ini:
Saya tidak yakin mengapa seseorang akan menggunakan memperpanjang hanya secara langsung mengatur properti dalam prototipe jQuery, itu melakukan hal yang persis sama hanya dalam lebih banyak operasi dan lebih banyak kekacauan.
sumber