Lima atau lebih sedikit tips untuk menulis JavaScript yang bagus? [Tutup]


14

JavaScript jelas menjadi sangat diperlukan; Namun, saya masih baru untuk itu, dan saya merasa sulit untuk melawan perasaan yang tampaknya berantakan dan saya tidak ingin menghadapinya sekarang. Saya lebih jauh dalam pemahaman saya tentang bahasa lain daripada saya dengan JavaScript, karena saya sepertinya tidak bisa mengatasi rasa takut ini. Saya merasa bahwa, ketika saya menulis JavaScript, saya mencoba melukis potret anak-anak Weimaraner.

Biasanya membantu saya untuk menjaga beberapa arahan yang paling penting dalam pikiran bahwa saya dapat bertanya pada diri sendiri untuk setiap gerakan yang saya buat. (Menurut saya, segelintir orang adalah lima atau kurang.)

Bisakah Anda mencantumkan lima (atau lebih sedikit) pertanyaan khusus untuk JavaScript yang harus saya ajukan pada diri sendiri untuk setiap gerakan yang saya buat, ketika saya mengode JavaScript? Akan jadi apa mereka?

Perbarui: untuk memperjelas, saya tidak meminta lima hal yang perlu diingat ketika mempelajari JavaScript; Saya meminta lima pertanyaan untuk selalu bertanya pada diri sendiri maju, bahwa semua orang harus selalu bertanya. Pertanyaan tingkat tinggi seperti: "Apakah saya cenderung mengulanginya di tempat lain?" atau "apakah nama variabel / fungsi ini cukup spesifik (atau terlalu spesifik)" <== kecuali pertanyaan-pertanyaan contoh ini tidak khas pada JavaScript. Saya mencari arahan yang khas untuk JavaScript.


3
Pertanyaan seperti diungkapkan mendorong banyak jawaban, yang masing-masing akan sama-sama valid. Pertanyaan semacam ini tidak membuat pertanyaan yang bagus. Bisakah Anda ulangi semuanya? Kalau tidak, ia berpeluang besar untuk ditutup.
ChrisF

2
"Daftar 5 teratas" bukanlah yang kami lakukan di sini di Programmers.SE. Jika Anda tertarik untuk mendapatkan jawaban atas masalah tertentu yang Anda alami, jangan ragu untuk bertanya tentang itu. Kalau tidak, saya sarankan Reddit r / Programming untuk menghasilkan daftar seperti ini.

Jawaban:


6

Saya akan menjawab ini dalam dua bagian. Salah satunya adalah "Lima atau lebih sedikit tips tentang belajar menulis JavaScript yang baik". Yang lainnya adalah "Lima atau lebih sedikit tips untuk menulis JavaScript yang baik".

Belajar:

  1. Mengajukan pertanyaan
  2. Mendengarkan
  3. Baca
  4. Membuat barang

Perbuatan:

  1. Hindari global (modularisasi)
  2. Lakukan hal-hal sulit di luar loop (pemilihan DOM, deklarasi fungsi, dll.)
  3. Pelajari cara kerja ruang lingkup
  4. Pelajari kapan dan bagaimana cara menggunakan penutupan
  5. Pelajari cara kerja Object Oriented JS

EDIT (menambahkan pertanyaan untuk mematuhi OP):

Apa ruang lingkup yang saya rujuk?

Ini akan membantu mengatasi global yang bocor, penangan acara, dan kapan harus menggunakan penutupan.

Apakah saya mengulangi sendiri?

Abstraksi dan penggunaan teknik OO yang tepat adalah penting. Gunakan dengan bijak.

Apakah kode saya berulang?

Sangat mudah untuk menemukan diri Anda menempatkan akses DOM ke dalam satu lingkaran, atau membuat fungsi (anonim atau lainnya) dalam satu lingkaran. Perhatikan bahwa ini bisa benar dari kode yang menggunakan setTimeoutatau setIntervaljuga loop tradisional.

Apakah ini berarti apa yang saya pikirkan artinya?

Nilai kebenaran dan kepalsuan di JS bisa sedikit rumit, terutama ketika menggunakan perbandingan yang tidak ketat ( ==sebagai lawan dari ===). Pengetikan dinamis, ketik pemaksaan, dan apakah Anda mereferensikan objek atau literal bisa relevan juga.


28

Pertama, ketahui bagaimana teknologi di baliknya bekerja.

Anda perlu mengetahui hal ini karena pengetahuan di balik cara kerjanya, karena Anda akan mengalami masalah jaringan, atau, seperti yang telah saya lihat berkali-kali, orang-orang sepenuhnya fasih dalam memahami apa sebenarnya sisi server dan sisi klien. Salah satu pertanyaan newb paling umum yang saya lihat adalah "Bagaimana saya bisa membuat JS mengubah variabel dalam kode ASP saya ?!"

  • Apakah Anda mengerti ethernet / wifi dan TCP / IP untuk memiliki gambaran umum tentang apa yang terjadi?
  • Berapa banyak HTTP yang Anda ketahui?
  • Apakah Anda benar-benar mendapatkan HTML? Tentu, Anda mungkin tahu cara kerja tag dan hal-hal sarang, tetapi apakah Anda benar-benar memahami mode doctype dan quirks? Apakah Anda mengerti bahwa Anda tidak boleh meletakkan tag paragraf di sekitar elemen daftar?
  • Ciptakan JavaScript (dan jelaskan itu dapat dijalankan di sisi server). ecmascript, livescript, moccript, jsscript, node ...
  • Pelajari Window API, pelajari DOM API, dan pelajari XHR API. Jika Anda tidak tahu tiga hal ini, Anda tidak memiliki kode penulisan bisnis untuk browser.

Pahami kode Anda lebih besar dari Anda, atau situasi spesifik Anda

  • Tentu, Anda menulis sesuatu, tetapi semua orang bisa melihatnya. Itu semua sumber "terbuka". Tentu, Anda dapat mengaburkannya, mengecilkannya, apa pun ... pada akhirnya, jika saya ingin melihat Anda kode, itu sepele bagi saya untuk mengalahkan metode apa pun yang Anda tempatkan.
  • Anda perlu memahami beberapa perbedaan browser. Targetkan yang paling populer, atau yang demografis pasar Anda miliki. Misalnya, ie6 tidak akan membuat elemen sel tabel DOM jika Anda menambahkan anak daripada metode DOM API khusus untuk tabel. Ada lebih banyak contoh, Anda perlu mempelajarinya.
  • Anda perlu memahami cara menulis kode di sekitar semua masalah ini di browser, bukan browser spesifik Anda. Anda akan dengan cepat mempelajari hal-hal yang berfungsi dengan baik di satu browser lambat di browser lain. Anda harus mengetahui cara kerja browser dan mengapa mereka berbeda.
  • Demi janggut Odin, jangan menulis kode yang memungkinkan saya melakukan serangan lintas-situs scripting pada kode Anda. Jika Anda membuat panggilan ajax ke sel dan melakukan sesuatu seperti cell.innerHTML = "<script>alert("xss")</script>", dan kotak peringatan muncul, Anda telah melakukannya dengan salah.
  • Tinggal jauh dari DynamicDrive, w3Schools, dan situs web yang memberikan saran buruk. Anda perlu menemukan komunitas yang memberikan saran yang bagus. Di sini, di Stack Overflow kami memiliki ruang obrolan JavaScript dan Node.JS, dan kami melakukan yang terbaik untuk terus mendorong batasan apa yang "lebih baik", di mana sebagai situs seperti w3 menyimpan data yang ketinggalan zaman dan tidak pernah repot dengan itu. Anda harus tetap menggunakan situs spesifikasi resmi seperti W3C , Mozilla Developer Network (MDN). Minta peer-review kode Anda. Ketika Anda merasa seperti Anda melakukan sesuatu yang menyakitkan dengan kode Anda, ketika Anda melakukan banyak cut + paste + tweak dengan kode Anda, Anda harus segera datang ke ruang obrolan dan meminta panduan untuk menulis kode yang lebih baik.
  • Ketika Anda datang untuk panduan, atau ingin berbagi hal keren yang Anda buat ... tolong, tolong. Tolong, pastikan Anda mendokumentasikannya, pastikan nama variabel Anda masuk akal, pastikan itu tidak semuanya berlapis. Anda perlu menulis kode bersih. Jika Anda memiliki setumpuk sampah, Anda tidak hanya gagal, tidak seorang pun yang tahu bagaimana membantu Anda akan menginginkannya . Bantu kami membantu Anda.
  • Anda ingin menulis JavaScript-- itu keren, anggap tidak semua orang mendukung JavaScript. Dua alasan untuk ini - 1) Internet lebih cepat untuk semua orang (daripada "ajax semua hal" yang mengarah pada pengalaman yang lebih lambat). 2) Web lebih mudah diakses oleh orang di peramban berbasis konsol, orang yang tidak menggunakan skrip, ponsel. Yang ingin saya katakan adalah, situs Anda harus menurun dengan anggun jika seseorang tidak memiliki JavaScript dan paling tidak, gunakan <noscript>tag untuk memberi tahu mereka.
  • Karena sifat prototipe dari JavaScript, Anda dapat membuat perubahan pada bagaimana bahasa sebenarnya bekerja - yang benar-benar manis. Anda tahu, JavaScript sedang berkembang, kami mengeluarkan "ECMA Script 3", yang merupakan versi JS yang lebih lama, dan menjadi "ECMA Script 5" (alias, es5). Karena prototipe, kita dapat memperbaiki bahasa es3 di lapangan agar berfungsi seperti es5. Itu artinya, ie6, browser berusia 10 tahun mendapatkan fitur bahasa yang keluar tahun lalu. Gunakan es5-shims di mana pun Anda bisa, mereka sangat keren dan Anda perlu melihatnya.
  • Dunia barat anak-anak kulit putih berbahasa Inggris bukan yang menggunakan internet. Sesuai kode. Ini berarti Anda perlu memahami internasionalisasi, dan menulis kode yang berhubungan dengan permintaan yang lebih tinggi. 10 tahun lalu ada kurang dari 500 juta orang online, hari ini kira-kira 2 miliar, dan dalam 10 tahun lagi? Mungkin dekat dengan setiap orang di planet ini akan memiliki akses internet, itu berarti Anda harus mendukung nama-nama yang tidak sesuai dengan regex /[a-z ']/i, tetapi termasuk aksen Hindi, Arab, (ini adalah masalah yang ada dari pengembang yang berpandangan pendek), Cina , dan lain-lain. Memahami set karakter, Unicode dan UTF-8.

Anda seorang programmer, bukan pabrik pasta. Berhenti menulis spageti.

  • Beri nama variabel Anda setelah hal-hal yang masuk akal.
  • Dokumentasikan kode Anda. Saya tidak peduli jika Anda menggunakan JSDoc didukung oleh badak atau Anda memiliki banyak coretan. Tulis dokumentasi yang membantu orang yang akan menggunakan kode Anda. Tulis dokumentasi untuk seseorang yang ingin meningkatkan atau mempertahankan kode Anda. Sertakan komentar yang bermanfaat. Komentar suka "This fizzes the bizz"atau setengah bahasa Inggris setengah bahasa Perancis tidak membantu. Jelaskan apa fungsi tidak. Jelaskan bagian kode yang kompleks.
  • Cari tahu bagaimana membatasi pengulangan kode. Cari desain modular atau pola fungsional. Lihat apa yang bisa Anda abstraksi. Anda seharusnya tidak pernah memotong + menempel + mengutak-atik segmen besar kode untuk melakukan hal yang sama.
  • Anda perlu memahami DOM API. Penyediaan DOM dan objek jendela untuk banyak hal besar. Ini kedengarannya seperti banyak pekerjaan tetapi itu karena itu adalah akronim yang menakutkan. Banyak ninja JavaScript Anda suka menulis kode seperti <a href="javascript:alert("foo")">. FFS JANGAN MELAKUKANNYA. Tunggu dokumen lengkap dimuat, pisahkan kode JavaScript Anda dari dokumen html. Ini adalah praktik dasar OOP 101, tapi jangan masukkan JS atau CSS Anda ke dalam dokumen html Anda. Cari tahu bagaimana melakukannya dengan benar atau temukan seseorang yang tahu bagaimana menunjukkan kepada Anda bagaimana melakukannya. Sekali lagi, ajukan pertanyaan.
  • itu Javascript:foo("buz")adalah protokol-psudeo, itu tidak sepenuhnya didukung, dan jika Anda tidak in-line javascript Anda tidak akan menggunakannya di tempat pertama. Saya berjanji kepada Anda dari lubuk hati saya, tidak ada alasan apa pun di dunia ini atau di mana pun di dunia yang Anda BUTUHKAN untuk menempatkan javascript Anda di dalam elemen HTML. Pernah. Jadi jangan lakukan itu. Aku bahkan tidak akan membantu orang-orang yang melakukan hal itu lagi, itu yang buruk.

Cari tahu bagaimana menulis kode sedemikian rupa sehingga tidak rusak sepanjang waktu.

  • Variabel global adalah salah satu masalah terbesar. Cari tahu cara kerja pemrograman fungsional dalam JavaScript. Cari tahu apa itu mengangkat. Cari tahu bagaimana cara menghindari variabel global.
  • Gunakan alat analisis kode statis. Ini akan mengingatkan Anda segera untuk semua "oops" kecil yang Anda buat saat menulis kode Anda. Lupa titik koma di suatu tempat? Oh, ini dia. Punya global di suatu tempat? Oh, ini dia. Kode yang mungkin melemparkan banyak kesalahan misteri ketika Anda mencoba menjalankannya? OH! Mereka disana! Tidak ada lagi bermain-main dan menatap setumpuk kode selama berjam-jam mencoba mencari sesuatu yang hanya kesalahan sintaksis. (Yah, hampir tidak ada, Anda mungkin telah melakukan sesuatu yang tidak dapat ditangkap, tetapi umumnya mengagumkan).
  • Tes unit. Tidak ada alasan untuk tidak melakukannya. Ada banyak alat pengujian unit di luar sana. Pada dasarnya, unit testing adalah "Ini fungsi saya" dan "Saya ingin output Y" "Ini beberapa input tes" Dan tesnya adalah "Apakah semuanya bekerja?" Ada banyak kerangka kerja pengujian JS, seperti QUnit yang populer. Ikuti tur melalui mesin pencari favorit Anda dan lihat apa yang menggelitik kesukaan Anda. Tapi gunakan itu.
  • Manajemen kontrol sumber, juga dikenal sebagai kontrol versi. Git populer, dan dengan alasan yang bagus. Begitu juga SVN dan beberapa lainnya. Yang perlu Anda hentikan segera adalah mengedit kode produksi. Anda perlu berhenti mengubah nama file main_backup_20110911.js.bak.1Anda kehilangan barang, direktori Anda menjadi berantakan, Anda tidak dapat dengan mudah "mundur" ke titik waktu sebelumnya. Anda tidak dapat melihat apa yang terjadi, Anda tidak dapat membuat tambalan kode. Jadi, mulailah belajar GIT, itu akan memakan waktu satu jam dan Anda tidak akan pernah kembali.
  • Ulasan rekan. Anda tidak yang baik, baik aku juga saya mendapatkan yang lebih baik dengan meminta umpan balik sebanyak yang saya bisa. Begitulah cara Anda harus melakukannya juga.

Tuliskan JavaScript yang disukai orang

  • Cari tahu mengapa kode Anda lambat. Gunakan jspref dan buat tes.
  • Berhenti mengikat acara ke satu elemen DOM, itu lambat, dan menciptakan masalah serius yang menggelegak peristiwa yang akan menghabiskan banyak waktu Anda. Penelitian "delegasi acara" dalam JavaScript.
  • BERHENTI menggunakan innerHTML untuk mengedit DOM. Ini kembali untuk mempelajari apa itu HTML, dan mempelajari apa itu DOM. HTML adalah data yang dikirim dari server yang menggunakan mesin rendering browser Anda untuk membuat banyak objek pemrograman yang akhirnya menjadi Obyek Dokumen. Ketika Anda menggunakan innerHTML Anda meminta browser Anda untuk merender ulang semuanya. Untungnya, seperti lebih dari 10 tahun yang lalu, kami menciptakan DOM API, dan memungkinkan Anda "menambahkan anak" atau "membuat simpul teks," tanpa harus memperbarui semuanya. innHTML adalah aib yang diciptakan oleh Microsoft - jika Anda menggunakannya, Anda juga kehilangan semua hak istimewa untuk mengeluh tentang IE6 yang mengerikan karena Anda membantu sampah tetap ada selamanya. Pelajari DOM.
  • Perlu bekerja di mana pun ia bisa. Jika sesuatu tidak didukung, itu perlu menurunkan anggun sehingga pengalaman tidak menyedot - Anda tidak bisa hanya menampar pengguna Anda di wajah dan kecelakaan.
  • Hak cipta dan lisensi penting. Jangan merobek kerja keras orang lain. Jika seseorang mengatakan "bukan untuk dijual kembali," Anda tidak bisa menjualnya. Jangan menjadi brengsek, atau kami akan membenci kode Anda karena menipu orang yang bekerja keras.
  • JS adalah prototipe, bukan kelas. Berhenti lakukan itu. Jika Anda tidak mengerti cara kerja prototipe, Anda perlu melakukannya. Google itu. JavaScript bukan berbasis kelas, berhenti berusaha membuat kelas, sangat jarang berhasil dengan baik. Orang-orang mencoba untuk menulis kode klasik dalam bahasa prototipe dan menggunakannya sebagai kasus untuk "mengapa bahasa menyebalkan", saya bisa membuat kasus yang sama karena Ruby tidak dapat mendukung prototipe. Pelajari sesuatu yang baru dan berhenti melakukan kesalahan.

Fokus pada dasar-dasar, selalu.

  • Anda salah, dan itu luar biasa, karena Anda tahu sesuatu sekarang. Tidak ada yang lebih buruk daripada seseorang yang tidak akan mengakui kesalahan dan terus membanting kode buruk keluar dari pintu seperti mereka adalah ninja pahlawan super rock-star pemberontak. Mereka hanya orang bodoh. Akui Anda bisa salah, akui Anda mungkin salah, minta bantuan.
  • Anda tidak selalu membutuhkan jQuery. jQuery membuat banyak kode lambat dan membantu orang yang tidak tahu JS untuk menulis JS. Ini lebih jauh masalah karena JS tidak mengharuskan Anda tahu JS untuk menulis JS. Sosok pergi. Setelah Anda memahami beberapa hal yang saya sebutkan di atas seperti peristiwa belajar, belajar DOM, belajar tentang innerHTML, Anda akan melihat mengapa jQuery dapat merusak kode Anda. Ini dapat digunakan dengan benar di banyak tempat, tetapi seringkali Anda dapat menggunakan pustaka yang lebih kecil atau bahkan megap - megap JavaScript standar yang disertakan dengan browser Anda untuk mencapai sesuatu. Anda tidak perlu jQuery untuk melakukan apa pun, itu membuatnya lebih mudah untuk menulis beberapa kode yang keren jika Anda belajar tetapi Anda harus mulai melakukan lebih baik dan belajar lebih banyak - ketika Anda tahu lebih banyak, Anda akan mencari cara untuk tulis kode yang lebih baik di jQuery.Lihatlah beberapa perpustakaan JavaScript lainnya dan berhentilah berpikiran dekat.
  • Anda tidak perlu memotong + menempel + mengubah, membuat kode KERING. Saya sudah menyebutkan ini sebelumnya, tetapi ini juga penting di sini. Anda tidak dapat menulis kode kualitas jika basis kode Anda memalukan.
  • Jangan menyalahgunakan susunan / perbedaan objek, pelajari cara mengulang. Pelajari mengapa Anda menggunakan for (;;)dan mengapa Anda menggunakan for( in )loop. Kapan menggunakan loop sementara. Berhenti bersarang IF ketika Anda hanya bisa menggunakan sakelar. Objek tidak menyimpan pesanan, jadi jangan gunakan itu sebagai array; Opera tua / FF, MISE tua, terkadang Flash tidak akan menghormati urutan objek Anda. Gunakan array jika Anda ingin menjaga urutan hal-hal, gunakan objek jika Anda menginginkan objek (sesuatu yang tidak memiliki urutan elemen).
  • Bagaimana struktur keputusan dapat digunakan untuk keuntungan Anda, bukan menambah kompleksitas pada kode Anda. Berhenti bersarang IF, cari tahu bagaimana operator logis Boolean bekerja. Cari tahu bagaimana case-switch bekerja.
  • RTFM. Tempat terbaik untuk belajar tentang kode yang lebih baik adalah dengan membaca spesifikasi yang sebenarnya. Baca spesifikasi RFC pada bagian kode yang ingin Anda gunakan. Baca dokumen skrip ECMAS. Baca spesifikasi DOM W3C. Baca spesifikasi W3C XHTML / HTML / HTML5. Baca spesifikasinya, bagus.

Fokus pada permainan panjang, bukan flash cepat dan mati.

  • Anda harus membantu komunitas, Anda harus menulis kode yang akan ada untuk waktu yang lama. Punya gairah tentang kode dan komunitas Anda. Jika Anda meninggalkan pengetahuan buruk di suatu tempat, kembalilah dan perbaiki. Informasi yang buruk sangat sulit untuk dibersihkan dan bertahan selamanya. Lakukan bagianmu. Jangan bantu w3sekolah memperburuk web.
  • Jangan langsung datang dan berkata, "Hei, aku punya ide bagus tentang cara menggunakan which" letakkan banyak kode yang tidak dapat digunakan dan menghilang oleh siapa pun. Anda tidak berkontribusi apa pun. Jangan gunakan variabel suka adan chezburger.
  • Belajar menemukan kode yang buruk dan kode yang baik, temukan di kode Anda sendiri, buat kode Anda yang buruk menjadi kode yang baik.
  • Buat sesuatu, pelajari sesuatu, ajarkan sesuatu.
  • Perluas wawasan Anda. Anda tidak bisa hanya menulis JavaScript selamanya - mengambil cuti panjang ke sesuatu yang menarik minat Anda, kembali, berbagi apa yang Anda pelajari dan lihat apakah Anda dapat menemukan tempat untuk itu di komunitas. Coba tunjukkan pada dunia lain apa nilai JavaScript juga saat Anda di luar sana.
  • Anda masih salah, bahkan ketika Anda tahu segalanya. Gunakan bukti untuk menjadi benar, bukan status / otoritas Anda. Anda tidak akan pernah benar, tetapi bukti Anda selalu benar. Jangan masuk ke pertandingan kencing, sesulit itu untuk menghindari kadang-kadang. Entah ada buktinya atau tidak. Nyala api tidak membantu siapa pun.

Bagi siapa pun yang tertarik, saya sebenarnya telah mengambil sebagian besar dari catatan pribadi pada tutorial saya tidak selesai menulis.


Jawaban Anda, di bagian atas, benar-benar membingungkan HTTP dan HTML.
Bryan Boettcher

@ Insta Saya cukup disengaja dengan mengatakan Anda perlu memahami HTTP. Seperti yang saya katakan, "Salah satu pertanyaan newb paling umum yang saya lihat adalah" Bagaimana saya bisa membuat JS mengubah variabel dalam kode ASP saya ?! ". Mereka tidak mengerti protokol yang membawa konten HTTP, cookie, dan header dari server ke klien. Saya mencoba untuk mengatakan seseorang perlu mengetahui lapisan sehingga mereka tidak bingung dengan hal-hal ini. Untuk mengekspresikannya secara fungsional, saya akan mengatakan: TCPIP(HTTP(ClientServerRelationship(), Cookies(), HTML(JavaScript(Knowledge))))
Incognito

1
"Apakah Anda benar-benar mendapatkan HTTP? Tentu, Anda mungkin tahu cara kerja tag dan barang-barang sarang, tetapi apakah Anda benar-benar memahami mode doctype dan quirks? Apakah Anda mengerti bahwa Anda tidak boleh meletakkan tag paragraf di sekitar elemen daftar?" Tidak ada dalam kutipan yang melibatkan protokol transport, di luar kasus penyalahgunaannya.
Bryan Boettcher

1
@insta Ah maaf, saya sama sekali tidak melihat itu, saya sudah mengubahnya ke HTML. Terima kasih :)
Incognito

1
+1 Ini adalah jawaban yang jauh lebih baik daripada yang diterima
Tom Squires

7
  1. Baca Douglas Crockford's Javascript: The Good Parts . Itu tip, tapi jujur, itu saran terbaik yang pernah saya dengar untuk menulis javascript yang baik.

  2. Terkait, baca artikel Douglas Crockford tentang Javascript .


9
Tapi jangan menganggapnya agama. Lihatlah dan pastikan itu masuk akal bagi Anda. Ajukan pertanyaan di mana Anda tidak mengerti tujuannya.
Incognito

3
alert('This illustrates how JavaScript has first-class functions');
alert('It also illustrates how to use closures.  Try running this code in your browser.');

var funky = function(s) {
    alert("We're getting funky with " + s);
};

var makeFunkyObject = function(funkyFunction) {
    var numberOfTimesAlerted = 0;
    var fn = { };
    fn.alertFunky = function(s) {
        funkyFunction(s);
        numberOfTimesAlerted++;
    }
    fn.getNumberOfTimesAlerted = function() {
        return numberOfTimesAlerted;
    }
    return fn;
}

var funkyObject = makeFunkyObject(funky);

funkyObject.alertFunky('Alice'); // alerts We're getting funky with Alice
funkyObject.alertFunky('Bob'); // alerts We're getting funky with Bob
alert(funkyObject.getNumberOfTimesAlerted()); // alerts 2

alert('Also, be sure to distinguish between learning about JavaScript and learning about the DOM');
alert('The former is awesome; the latter, not so awesome.');

+1: Setelah Anda grok ini, Anda akan menjadi ninja javascript.
Spoike

2

Berikut adalah beberapa pertanyaan yang harus Anda lakukan tentang JavaScript.

  1. Bagaimana cara kerja JSON dan apa manfaatnya?

  2. Mengapa objek fungsi dalam Javascript?

  3. Mengapa saya tidak harus menggunakan eval?

  4. Bagaimana cara membuat acara dalam javascript?

  5. Bagaimana cara fitur deteksi dalam javascript?

Cukup banyak mencakup sebagian besar hal yang perlu Anda lakukan dalam Javascript.


1
  1. Selalu gunakan tanda titik koma. Titik koma implisit (dalam JS) adalah ide yang mengerikan, terutama dengan beberapa sintaks menarik yang beredar dalam penggunaan umum. Mereka juga umumnya diminta oleh minifier JS.
  2. Hindari eval () . Ini menyebabkan segala macam masalah, dan merupakan cara yang sangat cepat untuk memperlambat aplikasi Anda. Kebanyakan kegunaan sebenarnya penyalahgunaan. Setiap kali Anda merasa perlu menggunakan eval(), periksa dua kali dan tiga kali untuk cara lain; hampir selalu ada cara yang lebih bersih dan lebih mudah kecuali Anda benar-benar mencoba untuk mengeksekusi seluruh nilai JavaScript.
  3. (function() {/* stuff */})()adalah cara yang baik untuk membungkus satu set kode dan membuat ruang lingkup lokal untuk itu. Menggunakan benda adalah cara lain yang sering kali lebih baik; objek lebih analog dengan ruang nama dalam bahasa lain saat digunakan dengan cara ini. Berhati-hatilah this. Tidak seperti kebanyakan bahasa lain, thistidak selalu merujuk pada apa yang menurut Anda intuitif. Juga ingat bahwa kecuali ditentukan lain semua variabel JS, fungsi dan objek lain semuanya global, bahkan di beberapa .jsfile.
  4. Temukan dan pelajari / gunakan perpustakaan JS yang bagus. jQuery adalah salah satu yang lebih populer. Ini akan melakukan banyak pekerjaan berat untuk Anda termasuk hal-hal seperti deteksi fitur dan abstrak manipulasi DOM dan berbagai cara berbagai hal telah diterapkan di browser yang berbeda.
  5. Selalu gunakan tanda titik koma. Serius. Dapatkan IDE yang memperingatkan Anda saat Anda melupakannya. Saya tidak ingin terdengar ranty, tetapi ada beberapa kali bug diperkenalkan hanya karena kurangnya titik koma dan browser tidak akan memperingatkan Anda tentang hal ini.

Anda tidak selalu membutuhkan titik koma, Namun saya akan setuju itu adalah praktik yang baik.
rlemon

1
Aturan ASI adalah sama di semua mesin JS sehingga kode Anda di satu tempat harus berperilaku sama di tempat lain. Sangat menyenangkan untuk melihat titik koma di semua tempat yang tepat tetapi mungkin tidak akan membunuh Anda seperti masalah lain. Yang sedang berkata, Anda harus berhati-hati terhadap ASI, melakukan hal-hal seperti return, dan baris berikutnya yang berisi data Anda, Anda akan benar-benar mengatakan return ;karena ASI. Saya akan mengatakan bahwa lebih penting untuk memahami aturan ASI dan spasi putih daripada "selalu menggunakan titik koma." Tapi ini cara yang bagus untuk menyelamatkan diri.
Incognito

+1 untuk menghindari eval, -1 untuk paranoia titik koma. Penyisipan titik koma JavaScript memiliki aturan tertentu yang, jika diikuti, sangat logis. Lihatlah
Ryan Kinal

@Incognito +1I'd say it's more important to understand ASI and whitespace rules than it is "always use semicolons."
rlemon

Untuk semua orang yang mengatakan bahwa Anda tidak selalu membutuhkan titik koma; kembali kepada kami ketika Anda telah melakukan pengembangan lintas-browser yang sebenarnya dalam javascript (lihat IE6, 7, dan 8).
Spoike

0

Saya percaya kelas menjadi alat yang cukup kuat untuk menyusun kode. Ada banyak aturan agnostik bahasa tentang bagaimana merancang sistem berbasis kelas dan beberapa prinsip OO sebenarnya lebih jelas diimplementasikan ketika menggunakan kelas.
Karena itu saya sarankan Anda melihat CoffeeScript .

Dari sana, saya sarankan Anda hanya mencoba untuk mengumpulkan informasi tentang bagaimana menerapkan SOLID , KERING , GRASP , Kiss dan YAGNI , dan yang lebih penting bagaimana untuk pergi tentang situasi, di mana mereka tampaknya konflik (mereka tidak pernah lakukan, hanya pemahaman Anda dari mereka atau masalah yang dihadapi memang). Ini cukup mudah ditemukan, bahkan di stackexchange.

Harap dicatat, bahwa prinsip-prinsip ini berlaku untuk pengembangan JavaScript "mentah" juga. Namun banyak konten yang akan Anda temukan pada mereka akan menggambarkannya menggunakan bahasa berbasis kelas dan karenanya mungkin berguna untuk memprogram dalam bahasa, di mana tidak ada terlalu banyak biaya tambahan untuk memahami mereka.
Secara pribadi, saya pikir JavaScript adalah bahasa yang sangat kuat, tetapi sebenarnya Anda harus terlebih dahulu sangat memahami bahasa lain, untuk benar-benar menghargai fakta ini.


-7

Saya membuat asumsi bahwa Anda menggunakan JavaScript untuk pengembangan UI sisi klien dalam aplikasi web.

1) Haruskah ini sisi klien atau ini sisi server? Saya tahu bahwa saya telah pergi dan menulis potongan kode serius yang benar-benar layak berada di sisi server dan sebaliknya. Banyak kali saya akan membuat panggilan AJAX untuk sesuatu yang berakhir lebih baik ditempatkan dalam kode Server untuk dimasukkan dalam perjalanan. Terutama hal-hal yang sifatnya statis tetapi berubah cukup teratur (daftar kategori misalnya.)

2) Apakah sudah ada plugin yang melakukan ini? Saya sering menggunakan JQuery dan jawabannya hampir selalu YA! Saya akan sering mengambil kode plugin yang ditulis seseorang dan menyesuaikannya dengan kebutuhan saya (biasanya menambahkan kelas tambahan untuk beberapa hal, dll.) Tetapi jarang saya harus mulai dari awal.

3) Apakah Javascript tempat yang tepat untuk ini? Kadang-kadang saya akan menemukan diri saya menambahkan sejumlah styling dinamis untuk sesuatu melalui Javascript ketika jauh lebih masuk akal untuk menggunakan CSS cerdas.

4) Haruskah saya menggunakan alat yang berbeda? Ini adalah sesuatu yang telah saya perjuangkan belakangan ini. Ada beberapa alternatif javascript seperti skrip kopi yang ditangani dengan baik di tumpukan saya (Rails 3.1) dan saya telah mempertimbangkan apakah akan memindahkan banyak kode saya atau tidak di sana.

5) Apakah kode Javascript ini baik? Javascript adalah kode seperti kode lainnya. Apakah kode ini sebagus kode saya yang lain? Jika tidak, mengapa tidak? Apakah ini bisa dibuang? Apakah saya malas?


4
Kiat-kiat Anda dalam menulis JavaScript yang baik meliputi "Jangan menulis JavaScript" dan "Tulis JavaScript yang baik". Maaf, -1
Ryan Kinal

1
@RyanKinal Ini termasuk "Gunakan jQuery sebagian besar waktu." Itu saja adalah masalah besar.
Incognito

2
@ f0x Mengapa Anda mengatakan itu? Mengapa Anda tidak ingin membangun pekerjaan yang telah dilakukan orang lain?
Drew

2
@Ryan, jawaban Anda untuk "daftar lima atau lebih sedikit pertanyaan yang harus saya tanyakan pada diri sendiri" termasuk tiga arahan yang dimulai dengan "pelajari [ini dan itu] ..." yang merupakan saran yang baik secara umum, tetapi jujur ​​saya menanyakan sesuatu yang sangat spesifik di sini: pertanyaan saya harus bertanya pada diri sendiri untuk setiap gerakan yang saya buat saat mengode JavaScript. Bukan "apa yang harus saya pelajari untuk memahami JavaScript." Drew adalah satu-satunya orang yang menjawab pertanyaan saat ditanyakan.

2
@ f0x Saya tidak mengatakan Anda harus secara buta menggunakan plugin terlepas dari apakah itu masuk akal atau tidak, tetapi kita semua menggunakan alat yang disediakan orang lain, jika tidak, kita semua akan menggunakan versi perakitan kami sendiri. Plugin dapat memberi Anda poin yang bagus untuk memulai dengan (a) menyelesaikan masalah Anda secara langsung atau (b) memberi Anda wawasan tentang bagaimana orang lain telah memecahkan masalah yang Anda coba pecahkan.
Drew
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.