>> Baiklah, sehingga hari ini, Saya akan bercakap
kira-kira JavaScript dan bagaimana ia yang berbeza dari bahasa lain
bahawa anda mungkin digunakan untuk seperti PHP.
Jadi dalam kuliah terakhir pada Monday, kita bercakap sedikit
tentang apa yang sama, apa yang biasa antara JavaScript
dan PHP atau Python atau Ruby atau C atau bahasa-bahasa lain
bahawa anda sudah biasa dengan.
Tetapi JavaScript ia sebenarnya mempunyai mengambil benar-benar unik
kepada model objek yang membuat ia semacam berbeza
daripada kebanyakan bahasa yang anda akan berurusan dengan.
Jadi fungsi yang amat
daripada underappreciated konsep dalam JavaScript.
Mereka adalah cara yang lebih berkuasa daripada mereka adalah dalam bahasa lain
kerana mereka boleh dalam - kerana satu sebab,
mereka dapat menjadi ditetapkan sebagai nilai-nilai.
Jadi di sini kita mempunyai var x sama fungsi
dan ia adalah kelas pertama nilai yang boleh diluluskan
sekitar kerana pertengkaran.
Jadi anda tidak perlu mengisytiharkan fungsi x
dan hanya menggunakan x dalam skop itu.
Anda boleh lulus nilai x mana-mana sahaja di seluruh, anda tahu,
sebagai hujah ke dalam fungsi lain
di mana anda boleh modul eksport seperti Daud yang tersebut dalam nod.
Jadi titik seterusnya adalah
bahawa fungsi adalah satu membantah pada JavaScript.
Jadi anda sebenarnya boleh menetapkan hartanah sebagai nilai-nilai
fungsi dan hanya merawat ia suka ia objek.
Oleh itu, apabila anda bekerja dengan jQuery, anda tahu, dolar yang
dan kemudian anda meninggal pemilih ke dalamnya
dan sembah sebagai fungsi.
Tetapi anda juga telah dolar dot AJAX.
Dan itu tidak jenis masuk akal jika anda berfikir
daripada fungsi hanya sebagai sesuatu yang anda boleh meminta
atau panggilan.
Tetapi JavaScript membolehkan anda set ciri-ciri kepada fungsi
hartanah sebagai statik dengan hanya x someProp dot
seperti yang saya menegaskan di luar sana.
Fakta yang seterusnya yang kami akan pergi ke lebih sedikit
mendalam adalah hakikat bahawa fungsi boleh dirawat
sebagai kelas dalam JavaScript.
Jadi ada konsep pengendali baru ini
yang mewujudkan satu contoh baru fungsi bersama-sama dengan yang amat
daripada seperti badan bertaraf seperti yang datang bersama-sama dengan ia
dan kita akan pergi ke dalamnya lebih sedikit,
ia dipanggil prototaip.
Dan ia apa yang membuat JavaScript sangat unik berbanding
ke bahasa lain yang berasaskan kelas,
JavaScript adalah prototaip berasaskan.
Dan kemudian hanya di bahagian bawah di sana,
fungsi hanya boleh dipanggil jelas seperti yang kita digunakan untuk.
Supaya apa-apa yang baru.
Satu lagi perkara yang unik adalah
yang tatasusunan sebenarnya objek.
Mereka tidak suka mereka berada dalam PHP
di mana anda hanya membuat pelbagai baru.
Ini sebenarnya trengkas yang kerana mengatakan array baru.
Dan pelbagai sebenarnya adalah subkelas objek.
Supaya sesuatu yang berbeza dan saya akan pergi
ke dalam sedikit yang lebih terperinci pada itu.
Dan keupayaan debugging
dengan JavaScript benar-benar tidak dapat ditandingi setakat yang saya lihat.
Ini adalah screenshot yang Inspektor Chrome
yang kita akan menggunakan untuk selebihnya
persembahan hari ini.
Dan untuk mendapatkan ini, anda hanya pergi untuk memfailkan alat pemaju
dan terbuka Chrome Inspektor atau anda boleh klik kanan
dan klik elemen menunjukkan saya fikir ia adalah pada halaman HTML
atau saya rasa ia arahan pilihan J membuka amalan ini.
Tetapi kita akan pergi ke ini dan anda sebenarnya boleh menetapkan titik putus
seperti yang anda sedang berjalan melalui kod JavaScript dan jenis
daripada menilai apa yang tempatan pembolehubah, apa nilai
daripada ini dan ia menjadikannya cara yang lebih mudah untuk kod debug.
Dan tidakkah ibu - ini bukan terpaksa kod pelayar sebelah
tetapi anda boleh sebenarnya menjalankan contoh yang
daripada Inspektor Chrome ini kod sisi perkhidmatan anda
yang benar-benar kemas kerana anda boleh melangkah melalui baris demi baris
sebagai permintaan datang ke dalam anda pelayan dan melihat apa yang berlaku
dan bermain dengan pembolehubah dalam konsol di sini.
Jadi seperti yang saya sebutkan, JavaScript adalah bahasa berasaskan prototaip-
yang bermaksud bahawa terdapat satu set nilai-nilai lalai yang merupakan jenis
tersembunyi untuk setiap fungsi
objek titik harta prototaip.
Jadi ia jenis yang hash nilai lalai hanya berbeza
bahawa apabila kamu sembah yang berfungsi dengan kata kunci baru,
mereka ditetapkan oleh lalai sebagai fungsi
yang terdapat pada contoh.
Jadi yang sebenarnya adalah benar-benar berkesan untuk -
ia merupakan satu cara yang cekap mewujudkan memori objek bijak
kerana JavaScript runtime hanya mempunyai untuk mengesan
prototaip objek.
Ia semacam menunjukkan dengan
apabila anda cretae baru contoh kelas.
Dan anda juga boleh meniru pusaka sebagaimana yang diketahui
dalam bahasa berasaskan kelas di mana anda mempunyai jenis
daripada seperti ini dilanjutkan itu, memanjangkan yang anda boleh meniru
bahawa dalam JavaScript melalui apa yang dipanggil
rantaian prototaip.
Dan kita akan melihat contoh-contoh tentang itu.
Jadi, jika anda - plugin jQuery sebenarnya mereka mengesyorkan jQuery
penulis untuk menggunakan dolar dot nota kaki untuk menambah fungsi
ke perpustakaan jQuery ini.
Dan kita sebenarnya akan melompat ke - Jadi, di halaman ini,
kita mempunyai dolar - Saya termasuk jQuery.
Dan jika anda melakukan dolar dot dalam konsol
yang saya sebutkan membawa anda ke atas melalui peralihan perintah J
atau hanya akan Lihat, Alat Pemaju, Pemaju
dan pergi ke tab Sumber itu.
[Didengar Catatan]
Oh pasti. Oleh itu, apabila saya mula menaip pembolehubah,
ia auto-siap untuk saya apa yang ada di sana.
Jadi saya menaip dalam dolar dan saya boleh lihat Saya berfikir Chrome mempunyai beberapa
terbina dalam dolar, dolar dan dolar x.
Jadi sekarang saya hanya mahu dolar dan saya dimasukkan ke dalam titik.
Dan kemudian ia menunjukkan saya semua sifat-sifat
yang terdapat pada objek jQuery ini.
Tetapi jika saya lakukan dolar dot prototaip,
Saya kini melihat semua kaedah yang saya digunakan untuk menggunakan
apabila saya mempunyai dolar, pemilih dan kemudian saya rantai off dengan,
anda tahu, menambah kelas atau menambah atau kabur atau mana-mana seperti.
Mereka semua sebenarnya pada prototaip
yang di bawah hud jQuery yang mewujudkan contoh baru sendiri
dan ia semacam menyembunyikan semua mereka maklumat dari anda.
Jadi titik bahawa saya membuat kembali di sini
dengan majlis itu, mereka sebenarnya menyembunyikan prototaip daripada anda
dan hanya alias ia untuk dolar dot nota kaki.
Jadi kebanyakan orang sebenarnya tidak menyedari
bahawa terdapat prototaip bawah that's hud -
yang anda boleh meneroka dan menambah fungsi tambahan
untuk setiap keadaan jQuery jika anda suka.
Jadi, "baru" adalah pengendali benar-benar jenis sukar
untuk memahami pada mulanya.
Apabila anda memanggil fungsi dengan "baru",
ia sama sekali berbeza cara memanggil fungsi
seolah-olah anda hanya dipanggil ia jelas.
Jadi, "baru" pengendali mewujudkan apa yang dipanggil contoh baru
sesuatu objek atau yang baru contoh, anda boleh memikirkan
objek sebagai kelas.
Dan apabila ini berlaku, nilai ini yang mungkin biasa
dengan dari jQuery, mereka jenis menetapkan ini
untuk apa sahaja yang mudah pada masa itu.
Mereka biasanya ditetapkan kepada nod DOM semasa yang anda
pada kerana anda akan melalui seperti setiap atau sesuatu seperti itu.
Mereka - nilai ini sepatutnya menjadi nilai contoh
yang anda buat dengan "baru", yang merangkumi segala-galanya
rantaian prototaip dan semua satu kaedah yang anda akan dapati
sebagai hartanah prototaip.
Jadi ia bergantung kepada bagaimana fungsi dipanggil,
apa nilai ini.
Dan ia benar-benar mengelirukan jika anda baru untuk JavaScript.
Tetapi setiap fungsi yang dinamakan mempunyai - mempunyai sekurang-nilai ini.
Jadi, walaupun anda belum membuat contoh baru sesuatu,
bahawa ini diandaikan menjadi global.
Atau anda boleh menghubungi fungsi menggunakan kaedah panggilan
mana kaedah memohon dalam JavaScript.
Anda dapat berfungsi dan menentukan apa ini harus.
Jadi anda boleh membuat ia dinamik, yang benar-benar kuat
tetapi juga membolehkan anda untuk melakukan perkara yang boleh mengelirukan
dan mengelirukan untuk pemaju lain
jika mereka tidak menggunakan dengan fakta itu.
Dan jQuery, saya akan berhujah menjadikannya lebih mengelirukan
dengan menjadikannya mudah dan menetapkan ia
kepada nod DOM semasa.
Tetapi peraturan mudah untuk mengingati apa nilai ini adalah
apabila anda sedang mencari
pada panggilan berfungsi adalah apa yang ditinggalkan titik.
Jadi jika anda mempunyai objek
dan ia sesuatu yang dot sesuatu yang merupakan fungsi yang
bahawa anda memanggil maka Nilai pertama adalah apa yang nilai
ini adalah.
Jadi di sini adalah contoh kod
di mana saya mewujudkan objek baru literal
yang hanya objek diwujudkan dengan pendakap kerinting
dan saya menetapkan nama untuk Bob
dan kemudian saya mempunyai sayName yang kaedah di sini yang -
jadi di dalam sayName ini jika saya x dot sayName,
nilai ini adalah sama untuk x kerana kiri
dot adalah x. Jadi, jika Saya memanggilnya x dot sayName,
ia akan berkata Hello Bob.
Dan kemudian satu lagi contoh
di mana saya benar-benar memberikan x dot sayName, fungsi
kepada Y berubah-ubah, yang seperti yang saya sebutkan
dalam JavaScript anda boleh menetapkan fungsi
kepada pembolehubah apabila anda mahu, ia benar-benar fleksibel dengan cara itu,
tetapi sekarang apabila saya memanggil Y, ia hilang konteks x.
Jadi ini kini global atau jika anda berada dalam mod yang ketat,
Saya percaya ia adalah batal atau undefined.
Tetapi - Jadi Y tidak apa yang anda menjangkakan di sini jika anda sedang mencari
pada x dan anda akan untuk memanggil sayName,
anda menjangkakan nama ini sepatutnya Bob.
Tetapi jika anda menarik ia di luar objek dan memanggilnya
dengan sendirinya, ini kini global.
Dan itulah yang saya telah menyebut apabila anda melihat dolar dot ini,
anda sering tidak fikir apa yang sebenarnya berlaku.
Tetapi jQuery jenis mempunyai mereka sendiri bahasa domain khusus
untuk berurusan dengan ini dan ia bukan apa yang anda digunakan
dalam JavaScript.
Dan saya menunjukkan ini kerana ia benar-benar penting
untuk menulis baik berstruktur kod berorientasi objek
dalam JavaScript untuk benar-benar mempunyai kefahaman yang baik dan memahami
bagaimana ini berfungsi dan bagaimana kerja-kerja model objek
dan bagaimana pengendali baru berfungsi.
Jika tidak, anda akan berakhir dengan spageti jQuery
di mana segala-galanya adalah jenis daripada seluruh tempat
dan hanya berurusan dengan DOM.
Jika anda boleh sebenarnya menulis JavaScript
dalam cara yang lebih berstruktur, ia membuatkan ia lebih mudah
untuk bekerja dengan, untuk menyusun daripada memisahkan kebimbangan
urusan dengan mengemaskini DOM dan berurusan
dengan logik sebenar dan kod.
Jadi mari kita lihat pada Beberapa contoh sekitar itu.
Jadi saya mempunyai beberapa contoh di sini.
Jadi ini adalah hanya satu contoh mudah menggunakan objek JavaScript
dan menambah fungsi beberapa kepadanya dan kemudian mewujudkan jenis
daripada seperti permohonan kecil.
Jadi ia amat mudah sebenarnya.
Satu-satunya perkara bahawa ia adalah pada mulanya ia meminta nama anda.
Jadi saya akan berkata Tim dan kemudian anda boleh menukar nama anda kepada Bob.
Dan itu semua ini permohonan tidak.
Tetapi apa yang saya suka untuk menunjukkan keluar ialah bagaimana ia ia.
Jadi saya mempunyai penjana nama ini objek yang mempunyai kaedah permulaan
yang meminta pengguna untuk nama mereka
dengan hanya memanggil askForName ini
yang turun di sini ia tidak segera yang
jika namanya tidak diberikan maka ia meminta sekali lagi
dengan memanggil askForName ini.
Dan kemudian sebaik sahaja ia mendapat nama, ia memerlukan nama kemas kini ini.
Jadi ini kemudian menetapkan Nama pengguna dalam tag h1 itu.
Dan jika nama itu tidak ditetapkan, ia melemparkan ralat.
[Didengar Catatan]
Oh pasti. Jadi ia menetapkan Nama pengguna dalam tag h1
dengan memanggil setDisplayName yang menetapkan HTML
atas nama JS bekas dan Saya awalan semua HTML saya
dengan selectors JS hanya kerana ia adalah satu tabiat yang baik untuk mendapatkan
ke hanya untuk membuat ia tidak begitu mengelirukan
apabila anda menggunakan selectors seperti ini ID atau kelas
bagi kedua-dua gaya dan logik
dalam anda JavaScript aplikasi akhir hadapan.
Kerana jika anda mempunyai yang berbeza kumpulan orang yang bekerja
pada asas kod dan anda mempunyai pemilih di sana
bahawa pereka memutuskan untuk berubah kerana it's -
tidak kelihatan hebat, jadi mereka mahu untuk dimasukkan ke dalam sebuah kelas baru dan mengambil
keluar anda dan anda bergantung di atasnya bagi tujuan JavaScript,
kemudian kod anda rosak.
Ia baik untuk awalan dan menyusun
daripada ruang nama seperti hampir Kelas JavaScript Berkaitan
atau atribut dengan awalan JS.
Jadi ini adalah cukup mudah dan anda boleh melihat
dalam semua kes-kes ini saya memanggil kembali ini pada akhir.
Jadi ini adalah satu yang baik tabiat untuk masuk ke dalam,
untuk memberikan ia satu nilai pulangan sah.
Dalam askForName saya tidak kerana yang masuk akal
bahawa anda akan mendapat nama belakang.
Tetapi apa yang membolehkan anda untuk melakukan kemudian
jika anda kembali kemas kini ini menamakan, ia kembali nilai
daripada setDisplayName yang kembali nilai ini.
Dan yang membolehkan anda untuk menyusun rantaian seperti yang anda sedang digunakan
dalam jQuery dengan mengembalikan nilai setiap masa ini.
Ini merujuk kepada objek semasa
supaya anda boleh memanggil dot ini askForName dot setDisplayName
dan ia akan menjaga nilai ini dan membolehkan anda
mempunyai rantaian bagus di sana.
Dan kemudian dalam - jadi dalam ini contoh kedua.
[Jeda]
Baiklah.
OK. Jadi mari kita teruskan dan membuka konsol
dan pergi ke tab Sumber saya.
Kami akan pop keluar ini sebenarnya.
Jadi dalam pemaju Chrome alat-alat yang saya sebut,
terdapat sekeping ini di sebelah kanan dan yang -
anda boleh melihat tanda berhenti ini walaupun secara lalai, ia hitam.
Tetapi apabila tetikus anda ke atasnya, ia berkata "Jangan berhenti pada pengecualian.
Klik jeda pada semua pengecualian. "
Dan apabila anda klik sekali lagi, ia bertukar menjadi biru.
Dan kini bila-bila masa yang ada kesilapan dibuang
dalam kod JavaScript anda, ia akan berhenti pada ketika itu dan membenarkan anda
untuk menilai apa yang berlaku.
Jadi - Dan itu benar-benar yang berguna konsep adalah kira-kira untuk menunjukkan.
Dan kemudian jika anda klik sekali lagi, ia bertukar ungu
dan ini biasanya apa yang saya menyimpan ia masuk
Ia hanya memecah kod apabila terdapat pengecualian
yang belum ditangkap.
Jadi banyak kali dalam jQuery untuk contoh, mereka cuba tangkapan
untuk menguji sama ada atau tidak pelayar mempunyai beberapa jenis keupayaan
dan terus dari sana.
Ini hanya apabila ada kesilapan
yang belum terperangkap dalam tangkapan cuba.
Jadi mari kita cuba dan mengemukakan nama yang kosong.
Jadi saya dapat melihat bahawa kod kini berhenti
pada kaedah updateName yang dan saya boleh mengarahkan tetikus ke nama
dan melihat ia kosong untuk kosong.
Sana ia sama dengan kosong.
Jadi, jika tidak menamakan membuang baru kesilapan dan kini saya boleh langkah ke belakang
melalui fungsi ruangan dan berkata, "OK,
di mana ia datang dari, "dan melihat apa yang nilai pelanggan adalah.
Jadi ia mempunyai kaedah askForName,
permulaan setDisplayName dan updateName.
Dan ini adalah hanya yang benar-benar berguna cara yang anda lihat mempunyai semua
pembolehubah yang boleh didapati dalam skop itu juga
sebagai pembolehubah penutupan, jadi apa-apa yang yang ditutup
alih oleh fungsi ini.
Dan saya dapat melihat bahawa - apa nilai pelanggan adalah
dan apa nilai ini.
Jadi ini 'menyebabkan kami dalam jQuery adalah sama
kepada elemen DOM semasa.
Tetapi ia benar-benar berguna untuk debugging kod
untuk memecahkan mengenai ralat seperti ini.
Satu lagi ciri yang Chrome Inspektor adalah
bahawa pada bila-bila anda boleh klik pada baris yang berbeza
berturut-turut dan ia akan memecahkan di tempat-tempat
di mana anda telah menetapkan titik putus mereka dirujuk sebagai.
Jadi jika saya klik, yang garis biru.
Jadi biarlah saya meneruskan pelaksanaan sini, OK, yang patah.
Dan sekarang mari kita menetapkan nama ke Alice dan memukul Hantar.
Jadi sekarang saya boleh melihat walaupun sebelum ia mendapat ke titik di
mengemaskini segala-galanya, kini ia berhenti di sini jadi saya boleh melihat
bahawa nama ini saya adalah Alice dan kemudian saya boleh terus -
biarlah saya memuat semula halaman.
Baiklah, jadi sekarang bahawa itu bermula pada permulaan lagi,
ia telah berhenti di ini talian dan saya dapat melihat
nama yang kini undefined.
askForName adalah yang berfungsi ia adalah, jadi itu juga sering berguna
jika anda mempunyai fungsi-fungsi yang yang datang dari fail yang berbeza
atau tempat-tempat yang berbeza dalam kod, anda boleh melihat di mana ia adalah,
dan kemudian melompat itu, ia akan menyerlahkannya.
Jadi yang baik untuk mendapatkan dalam tabiat menggunakan alat debugging
yang bukan sahaja memujuk log dot.
OK, jadi mari kita melihat contoh kedua
yang menggunakan lebih daripada prototaip kerana saya telah dirujuk kepada.
Jadi dalam contoh ini,
kita sedang mencipta baru fungsi dipanggil CS
dan ini adalah modal jadi standard konvensyen
dalam JavaScript jika fungsi sepatutnya digunakan
sebagai pembina, berbanding
kepada hanya biasa fungsi, anda mengambil kesempatan itu.
Jadi saya mempunyai modal CS dan ini mengambil courseId ubah
dan courseTitle yang Saya bersedia untuk courseId ini,
courseTitle ini dalam pembina.
Dan kemudian saya juga menetapkan pelajar dan ceramah sebagai tatasusunan kosong.
Jadi sebab yang anda -
OK, jadi prototaip hartanah kemudiannya ditakrifkan
turun di sini dengan - jadi template hanya garis bawah mudah
template, template garis bawah menjadi cara yang anda boleh -
sama dengan template yang Daud telah disebutkan
pada pelayan, anda boleh hanya menulis tag skrip
yang bukan merupakan JavaScript skrip tetapi HTML teks
dan apa yang saya lakukan dengan jQuery adalah -
tidak memelihara ini terbuka, ya, di sana kami pergi.
Dengan jQuery, ia mendapat Nilai HTML template yang
dan kemudian berjalan ia melalui menekankan perpustakaan utiliti
enjin template.
Jadi dokumentasi untuk yang turun di sini
bawah template utiliti
tetapi pada dasarnya anda boleh membaca lebih sedikit mengenainya.
Tetapi ia menilai rentetan ini dan bertukar ke dalam fungsi yang
yang kita boleh hantar data ke dalam dan ia memanggil dinamik.
Kedua-dua kaedah akan datang saya mempunyai adalah addStudent dan addLecture.
Ini hanya menambah mereka kepada tatasusunan dalaman yang saya tetapkan
dalam pembina dan maka kaedah menyebabkan.
Jadi, mari kita mewujudkan baru contoh CS dipanggil 164
yang mempunyai kursus ini bilangan 164 dan tajuk.
Dan kemudian CS50 yang mempunyai CS50 dan intro untuk CS1
dan kemudian menambah beberapa mengajar pelajar
dan kemudian memanggil CS50 menyebabkan.
Dan jika saya menjalankan kod, jadi Saya lakukan dengan eval.
Anda tidak benar-benar mahu menggunakan yang eval, tetapi saya hanya jenis
mengambil semua JavaScript yang di sini
dan menyempurnakannya dengan cepat.
Ia menyebabkan ke dalam ini template ini keadaan baru
kelas CS yang mempunyai sifat-sifat, jadi kami telah pergi
melalui dan dilakukan addLecture dan addStudent antara satu sama.
Dan seperti yang saya sebutkan kerana saya kembali ini,
Saya benar-benar dapat rantai ini addLecture dan addStudent panggilan
dan ia akan bekerja sama dengan baik.
Ciri-ciri lain di JavaScript yang lebih berguna
di sebelah pelayan di mana anda benar-benar pada waktu tertentu
jika permohonan anda mendapat lebih besar tidak tahu di mana anda berada
dan ia lebih sukar untuk menetapkan ini titik putus individu
yang saya nyatakan di Inspektor Chrome adalah
menggunakan kata kunci yang penyahpepijat.
Jadi ia hanya D-E-B-U-G-G-E-R.
Dan apabila anda meletakkan penyahpepijat kata kunci dalam kod anda
dan anda mempunyai - ada kita pergi, dua Gs.
Apabila anda meletakkan penyahpepijat kata kunci dalam kod anda
dan anda menjalankan penyahpepijat
seperti Chrome Inspektor di sini
atau Chrome sebelah pelayan Inspektor, ia memberitahu JavaScript
untuk menghentikan pelaksanaan pada baris yang kod dan kemudian ia membolehkan anda
untuk melangkah melalui selebihnya daripada pelaksanaan kod.
Jadi, jika saya klik kod jangka di sini, ia kini itu berhenti
di garisan penyahpepijat ini dan saya boleh lihat OK, begini nilai CS50
dan ia kursus mendapat tajuk, tentu ID,
ia langsung tidak mempunyai kuliah, ada pelajar.
Dan kemudian saya boleh melangkah melalui seluruh addLecture,
Saya dapat melihat ia menolak ke kuliah ini,
tetikus ke atas itu, "Hello World".
Saya boleh sebenarnya dalam konsol melakukan ini supaya ini ditetapkan
kepada objek semasa yang anda masuk
Kuliah ini adalah "Hello World".
Dan menyimpan loncatan melalui seberapa banyak yang saya mahu.
Jika saya tidak mahu melangkah
ke sebab fungsi panggilan ' Saya tahu apa yang berlaku
untuk melakukan pergi ke addLecture, ada butang ini di sini
yang mengatakan "Langkah lebih seterusnya panggilan fungsi, "dan saya boleh pergi
ke titik telah saya mungkin tertanya-tanya tentang sesuatu.
Seperti misalnya 164 menyebabkan.
Jadi pada masa ini, ia akan diberikan.
Saya dapat melihat template ini adalah template yang disusun.
Saya boleh lihat pada ketika ini saya perlu mempunyai dua pelajar
dan dua kuliah.
Dan kemudian ada prototaip rantai yang saya merujuk kepada.
Jadi, satu lalai yang datang bersama-sama dengan hanya objek
dalam JavaScript secara umum,
ia datang dengan dua tali nilai pembina.
Dan kemudian orang-orang yang Saya ditambah pada diri saya
dengan addLecture, addStudent dan kemudian sifat-sifat
yang unik untuk ini contoh kelas
kerana ia telah dituntut dengan kata kunci baru.
Jadi mari kita buat hanya satu contoh lanjut mengenai ini
dan kemudian kita akan melangkah kepada beberapa perkara yang lebih menarik
di sebelah pelayan.
Jadi mari kita pergi ke hadapan dan membuka Contoh terakhir ini yang -
mari kita lihat, di mana adalah kod?
Saya tidak tahu di mana ini pergi.
OK, baik, kita mungkin hanya melangkau kod ini maka sebenarnya -
oh berpegang, saya rasa saya terlepas lembaran gaya untuk kod tersebut.
OK, jadi mari kita membuat ini sedikit lebih besar.
Dalam contoh ini, saya menunjukkan lebih sedikit mengenai penubuhan
rantaian prototaip,
supaya menubuhkan warisan dengan JavaScript.
Jadi dalam kes ini, kita perlu satu katalog yang akan
untuk mungkin mengekalkan pelbagai kursus.
Dan sebagainya mempunyai katalog satu kaedah addCourse.
Jadi ia memeriksa sama ada kursus yang yang yang diluluskan pada adalah contoh satu
sudah tentu sebagai berdoa dengan kata kunci baru.
Jadi, jika anda cuba dan menghantar
dalam sesuatu yang berbeza, ia akan menjerit pada anda.
Yang menyebabkan kaedah yang akan menyebabkan setiap kursus
oleh menyusun template yang di bawah.
Dan kita mempunyai kursus yang akses
dalam kes ini kelas asas untuk kursus jabatan individu.
Dan bukannya menetapkan setiap
kursus dot kaedah prototaip dot
atau harta menggunakan melanjutkan pembantu di perpustakaan garis bawah
untuk menyusun panggilan melanjutkan prototaip ini dengan semua
sifat-sifat ini, yang merupakan berguna, sedikit lebih mudah untuk dibaca.
Dan kemudian turun di sini melakukan apa yang dikenali sebagai menetapkan
rantaian prototaip.
Jadi ini sebenarnya adalah sedikit sukar untuk orang pada mulanya
dan juga masih melakukan perbuatan ini untuk sementara, ia jenis keras
untuk membalut kepala anda sekitar.
Tetapi jangan biarkan yang menakutkan anda.
Jadi saya menubuhkan yang baru -
satu kelas baru membantah sini, CS.
Dan dalam pembina,
Yang saya katakan kursus memohon hujah ini.
Jadi hujah adalah khas nilai Saya rasa anda boleh memanggilnya
dalam JavaScript, yang kata kunci yang mempunyai semua
daripada segala-galanya itulah diluluskan sepanjang adalah hujah-hujah
fungsi yang terdapat dengan hujah-hujah memanggil,
dengan kata kunci hujah.
Jadi seperti yang saya menyeru dengan kursus dot memohon,
ini adalah konteks semasa dengan yang CS sedang dipanggil.
Oleh itu, apabila saya sembah dengan baru ia adalah - ia adalah satu nilai CS.
Dan saya katakan memanggil ini kaedah kursus di sini.
Oh maaf - panggilan ini kaedah kursus di sini
tetapi menetapkan nilai ini menjadi apa sahaja nilai
ini adalah di sini.
Sehingga, katakunci memohon membolehkan anda untuk jenis mengubah keadaan yang
di mana ini adalah bagaimana jQuery dibenarkan untuk menyusun suis
keluar ini kepada anda sebagai anda akan melalui
dan membuat elemen DOM bukan objek jQuery ini.
Jadi sekarang saya akan menetapkan fungsi sementara
yang akan merebut prototaip kursus.
Dan jenis menetapkan kepada prototaip yang
dan kemudian menetapkan prototaip pada objek fungsi CS
untuk contoh baru itu.
Jadi, pada asasnya saya sebaliknya berkata -
jika saya turun di sini tidak CS dot prototaip sama kursus baru.
Maka ia akan menjadi memanggil semua
dalam fungsi pembina ini,
yang saya tidak akan semestinya mahu.
Jadi semua yang saya lakukan adalah semacam mewujudkan hampir
seperti fungsi tumpang yang akan mempunyai prototaip kursus-kursus yang
padanya dan jenis meniru prototaip -
kursus ini tetapi tanpa melakukan segala-galanya dalam pembina
dan menetapkan bahawa untuk prototaip.
Dan kemudian saya hanya menambah supaya jabatan
dalam kes ini adalah Komputer Sains bagi objek CS.
Dan kemudian saya mempunyai jenis yang versi jambatan melakukannya.
Ia tidak boleh digunakan dalam IE9.
Jadi sebab itu saya mahu untuk menunjukkan jenis bagaimana -
apa ini melakukan di bawah hood.
Tetapi anda boleh menetapkan ia dengan cara yang sama
mana Econ sama fungsi tentu memohon hujah ini
dan kemudian berkata prototaip Econ dot sama objek dot CreateCourse
dot prototaip.
Jadi ia mencipta objek baru yang hanya prototaip
untuk kursus dan kemudian ditetapkan jabatan itu di sana.
Jadi sekarang mari kita hanya pergi menetapkan penyahpepijat di sini dan klik pada jangka.
Di sana kami pergi.
Jadi CS164 kita dapat melihat rantaian prototaip kami mempunyai
hartanah yang telah ditetapkan dalam pembina.
Jadi nilai-nilai ini yang telah ditetapkan dan kemudian di rantaian prototaip
untuk objek CS ia mempunyai jabatan Sains Komputer ditetapkan.
Dan kemudian pada asas rantaian prototaip,
kita kemudian mempunyai semua kaedah dan ciri-ciri
yang unik untuk objek kursus.
Dan maka kita mempunyai objek asas.
Jadi yang jenis yang cepat contoh rantaian prototaip.
Dan seperti yang anda lihat di sini, terdapat dua nilai setiap jabatan.
Jadi ada jabatan sains komputer
dan kemudian jabatan tidak disenaraikan yang saya kata
sebagai nilai lalai di sini.
Jadi rantaian prototaip sebenarnya hanya secara tunggal
senarai link.
Dan seperti cuba untuk mencari harta,
ia akan bermula pada nilai peringkat tertinggi.
Jadi apa yang yang ditakrifkan dalam fungsi pembina
dan kemudian semacam turun ke bawah rantaian prototaip dari sana.
Jadi kerana ia didapati, jadi -
jika di sini, saya katakan Jabatan dot CS50,
ia akan berkata Sains Komputer.
Tetapi jika saya katakan var -
[Jeda]
Tetapi jika saya katakan kemanusiaan sama kursus baru
dan kemudian saya berkata kemanusiaan dot jabatan,
Saya akan melihat jabatan tidak disenaraikan kerana ia pergi untuk yang pertama di -
Saya boleh melihat prototaip rantaian di sini sebenarnya.
Jadi ia pergi dulu ke kursus membantah dan melihat tiada apa-apa
rantaian prototaip di tahap ini bagi jabatan
atau bagi nilai jabatan supaya kemudian ia melompat ke tahap yang seterusnya,
perjalanan dan kelihatan kemukakan di sana dan mendapati ia.
Jadi ia hanya jenis seperti turun dari atas ke bawah
dan itulah jenis sesuatu yang unik
kira-kira JavaScript bahawa anda boleh mengubah apa-apa
nilai-nilai ini di bila masa.
Jadi dalam pembina atau di dalam kaedah individu pada objek
jika saya ingin menetapkan jabatan kepada sesuatu yang baru,
atau jika Saya juga mahu menetapkan mana-mana fungsi
yang sudah wujud
untuk sesuatu yang baru, Saya bebas untuk berbuat demikian.
Jadi sekarang saya mempunyai CS50 dot addLecture, kelihatan seperti itu.
Dan jika saya mahu untuk menetapkan ia untuk CS50 addLecture hanya sama
dengan fungsi kosong.
Maka sekarang saya dapat melihat ia hanya benar-benar berubah
yang anda tidak berupaya untuk melakukan ke bahasa lain
di mana anda mempunyai lebih ketat warisan kelas berasaskan
dan semuanya jenis ditubuhkan.
JavaScript adalah sangat, sangat fleksibel dengan kenyataan itu.
OK, mari kita melompat kembali dalam slaid.
Jadi jika misalnya anda sentiasa ingin fungsi
mempunyai tertentu nilai ini ditetapkan untuk itu.
Anda boleh memanggil fungsi dot mengikat
dan menetapkan apa nilai ini harus.
Anda boleh menganggapnya sebagai -
"Saya cuba untuk memikirkan baik contoh dunia sebenar tetapi ",
jika anda mahu untuk melindungi kod anda
terhadap seseorang berpotensi memanggil ia dengan nilai yang
yang tidak akan ini.
Seperti contohnya AJAX panggil balik seperti berlebihan atau kesilapan.
Mereka biasanya tidak dipanggil
dengan semantik baik nilai ini.
Dan anda seperti, "OK, saya sentiasa mahu ini menjadi nilai
objek kursus bahawa saya bekerja dengan.
Atau pandangan yang saya bekerja dengan dalam kod saya
yang mewakili ini Nod DOM, anda boleh menetapkan -
anda boleh mengikat konteks ini dan kemudian apabila ia dipanggil kemudian
oleh jQuery dan ia tidak mempunyai nilai yang baik ini ia akan melekat
dengan apa yang anda disempadani dengan.
Kemudian ada panggilan fungsi telah anda boleh menentukan konteks
dan menyatakan apa-apa ubah beberapa hujah.
Dan kemudian ada fungsi memohon yang anda boleh lulus
dalam konteks dan kemudian sama ada array
atau hujah-hujah objek yang Yang saya nyatakan seperti yang anda lihat di sana.
Dan hujah-hujah dalam mana-mana fungsi yang anda panggil,
anda hanya boleh menaip perkataan "hujah"
dan ia akan mempunyai semua hujah-hujah.
Ia mempunyai "panjang" harta
iaitu bagaimana hujah Mei adalah sebenarnya diluluskan dengan kaedah
kerana dalam JavaScript anda boleh menyusun panggilan
dengan nombor boleh ubah hujah.
Ia berguna untuk berkata jika ini mempunyai satu hujah,
kemudian mengikuti jalan kod ini.
Jika ia mempunyai dua, anda mungkin mahu mengikut cara yang lain.
Ia membolehkan anda untuk benar-benar mempunyai API dinamik untuk kaedah anda.
Anda boleh berfikir bahawa dengan jQuery
seperti apabila anda mempunyai dolar dot pada atau mengikat.
Dan ia semacam tidak perkara yang berbeza
sama ada anda meletakkan satu hujah atau dua atau tiga
atau memulakan dengan fungsi.
Ia menggunakan hujah-hujah harta
dan hujah-hujah panjang dalam banyak kes-kes
mempunyai sihir ini fungsi berlaku.
Perkara yang anda tidak boleh lakukan dengan hujah-hujah yang menggunakan ia hanya
secara lalai sebagai array.
Jadi anda boleh mengatakan hujah-hujah tiga dan menetapkannya untuk sesuatu
kerana anda boleh menggunakan tugasan pelbagai.
Anda boleh menggunakan - banyak daripada kaedah garis bawah
untuk sama ada koleksi atau untuk bekerja dengan tatasusunan,
anda boleh lepaskan pada hujah-hujah dan ia akan menyedari
bahawa ia adalah satu hujah objek dan jenis
daripada menjaga untuk anda.
Tetapi jika anda mahu menggunakan hujah-hujah yang diluluskan
melalui berfungsi sebagai array,
anda boleh menggunakan garis bawah dot dua array.
Salah satu bilangan fungsi utiliti
yang membina dalam untuk menekankan.