Saya adalah orang yang memulai konvensi ini pada tahun 2006 dan mempromosikannya di milis awal jQuery, jadi izinkan saya berbagi beberapa sejarah dan motivasi di sekitarnya.
Jawaban yang diterima memberikan contoh ini:
var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself
Tapi itu tidak benar-benar menggambarkannya dengan baik. Bahkan tanpa $
, kita masih akan memiliki dua nama variabel yang berbeda di sini, email
dan email_field
. Cukup bagus di sana. Mengapa kita perlu membuang $
salah satu nama ketika kita sudah memiliki dua nama yang berbeda?
Sebenarnya, saya tidak akan menggunakan di email_field
sini karena dua alasan: names_with_underscores
bukan JavaScript idiomatik, danfield
tidak terlalu masuk akal untuk elemen DOM. Tapi saya memang mengikuti ide yang sama.
Saya mencoba beberapa hal berbeda, di antaranya sesuatu yang sangat mirip dengan contoh:
var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it
(Tentu saja objek jQuery dapat memiliki lebih dari satu elemen DOM, tetapi kode yang saya kerjakan memiliki banyak id
penyeleksi, jadi dalam kasus tersebut ada korespondensi 1: 1.)
Saya punya kasus lain di mana fungsi menerima elemen DOM sebagai parameter dan juga membutuhkan objek jQuery untuk itu:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var emailJQ = $(email);
// Now email is the DOM element and emailJQ is a jQuery object for it
}
Yah itu agak membingungkan! Di salah satu bit kode saya, email
adalah objek jQuery dan emailElement
merupakan elemen DOM, tetapi di bagian lain, email
adalah elemen DOM dan emailJQ
merupakan objek jQuery.
Tidak ada konsistensi dan saya terus mencampurnya. Ditambah itu sedikit gangguan untuk tetap harus membuat dua nama berbeda untuk hal yang sama: satu untuk objek jQuery dan satu lagi untuk elemen DOM yang cocok. Selain itu email
,, emailElement
dan emailJQ
, saya terus mencoba variasi lain juga.
Lalu saya perhatikan pola umum:
var email = $("#email");
var emailJQ = $(email);
Karena JavaScript memperlakukan $
hanya sebagai huruf untuk nama, dan karena saya selalu mendapatkan objek jQuery kembali dari $(whatever)
panggilan, polanya akhirnya menyadarkan saya. Saya bisa menerima $(...)
telepon dan menghapus beberapa karakter, dan itu akan muncul dengan nama yang cukup bagus:
$("#email")
$(email)
Strikeout tidak sempurna, tetapi Anda mungkin mendapatkan idenya: dengan beberapa karakter dihapus, kedua baris tersebut pada akhirnya tampak seperti:
$email
Saat itulah saya menyadari saya tidak perlu membuat konvensi seperti emailElement
atau emailJQ
. Sudah ada konvensi yang bagus menatapku: mengambil beberapa karakter dari $(whatever)
panggilan dan berubah menjadi $whatever
.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object
dan:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var $email = $(email);
// $email is the jQuery object and email is the DOM object
// Same names as in the code above. Yay!
}
Jadi saya tidak harus membuat dua nama yang berbeda sepanjang waktu, tetapi cukup menggunakan nama yang sama dengan atau tanpa $
awalan. Dan $
awalan adalah pengingat yang bagus bahwa saya berurusan dengan objek jQuery:
$('#email').click( ... );
atau:
var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );