>> Regulă, așa că astăzi, Am de gând să fie vorba
despre activarea JavaScript-și modul în care aceasta este diferită de alte limbi
că ați putea fi plăcea PHP.
Deci, în ultima prelegere pe Luni, am vorbit un pic
despre ceea ce este similară, ceea ce este familiar între JavaScript
și PHP sau Python sau Ruby sau C sau alte limbaje
că tu ești deja familiarizat cu.
Dar de activarea JavaScript-se de fapt are o ia într-adevăr unic
pe modelul obiect care face Este un fel de cu totul diferit
de cele mai multe limbi, care ai de gând să se ocupe.
Deci funcții sunt un fel
de subapreciat concept în JavaScript.
Ele sunt mult mai puternice decât ele sunt în alte limbi
deoarece acestea pot in - pentru un motiv,
acestea sunt în măsură să fie stabilit ca valori.
Deci, aici avem var x este egal cu funcție
și este o prima clasa valoare care poate fi transmis
în jurul ca un argument.
Deci, nu trebuie să declara funcția x
și de a folosi doar x în care domeniul de aplicare.
Puteți trece valoarea x oriunde de-a lungul, stii,
ca un argument în o altă funcție
unde puteți modulul de export ca David menționat în nod.
Deci, punctul următor este
că o funcție este o obiect in JavaScript.
Astfel încât puteți seta de fapt, proprietăți ca valori
pe o funcție și chiar trata place că e un obiect.
Deci, atunci când lucrați cu jQuery, știți, că dolarul
si apoi sa treci un selector în ea
și l invoca ca funcție.
Dar apoi, de asemenea, au dolar dot AJAX.
Și că nu un fel de face sens, dacă credeți
a unei funcții la fel fiind ceva ce se poate invoca
sau apel.
Dar JavaScript vă permite să setați proprietățile pe funcții
Proprietățile statice cu doar x someProp punct
cum am subliniat acolo.
Următorul punct pe care suntem de gând să meargă într-un pic mai mult
în profunzime este faptul că funcții pot fi tratate
în calitate de clase în JavaScript.
Astfel încât nu există conceptul de din acest nou operator
care creează o nouă instanță de funcția împreună cu un fel
de ca organism de talie ca care vine împreună cu ea
și vom merge în ea un pic mai mult,
se numește prototipul.
Și este ceea ce o face JavaScript foarte unic în comparație
în alte limbi care se bazează clasă,
JavaScript este un prototip bazat.
Și apoi doar la în partea de jos,
Funcția poate fi pur și simplu numit clar cum suntem obișnuiți.
Deci, nu e nimic nou.
Un alt lucru care este unic este
matrice care sunt de fapt obiecte.
Ei nu sunt ca ei sunt în PHP
în cazul în care crea o matrice nou.
Aceasta este de fapt o prescurtare pentru a spune noua matrice.
Și matrice este de fapt o subclasă a unui obiect.
Deci, asta e ceva diferit și voi merge
într-un pic de o mai detaliu pe care.
Și a capacităților de depanare
cu JavaScript sunt într-adevăr de neegalat în măsura în care le-am văzut.
Aceasta este o captură de ecran inspectorului Chrome
pe care vom fie folosind pentru restul
prezentării astăzi.
Și pentru a ajunge la acest lucru, doar du-te la dosar instrumente de dezvoltare
și deschis Chrome Inspector sau puteți să faceți clic dreapta
și faceți clic pe spectacol elemente I Cred că este de la pagina HTML
sau cred că e comandă opțiune J deschide asta.
Dar vom merge în această și tu se poate seta de fapt puncte de întrerupere
cum ai trece prin codul JavaScript și sortare
a evalua ceea ce la nivel local variabile sunt, ceea ce valoarea
în acest sens este și ea o face modalitate mai ușoară de a depana cod.
Și nu - acest lucru nu este constrâns la cod-side browser
dar puteți de fapt executa o instanță
din acest Inspector Chrome pentru codul parte de servicii
care este foarte curat, deoarece poate pas prin linie cu linie
ca o cerere vine în ta server și de a vedea ce se întâmplă
și să se joace cu variabilele în consola aici.
Deci, după cum am menționat, JavaScript este un limbaj pe bază de prototip
ceea ce înseamnă că există un set de valori implicite, care sunt un fel
de ascuns pentru fiecare funcție
în punctul obiect proprietate prototip.
Deci e un fel de hash de doar valori implicite diferite
că atunci când invoca un funcționa cu noua cheie,
acestea sunt stabilite de către implicit ca funcții
care sunt disponibile în instanță.
Astfel că este de fapt într-adevăr eficient pentru -
este un mod eficient de crearea de memorie obiecte înțelept
pentru că JavaScript rulare trebuie doar să țină evidența
prototipului obiectului.
Este un fel de puncte de care
atunci când cretae un nou instanta a unei clase.
Și puteți, de asemenea, imita moștenire, este cunoscută
în limbile bazate pe clasa în cazul în care aveți un fel
a ca un acestei extinde că, extinde pe care le poate imita
că în JavaScript prin ceea ce se numește
lanț prototip.
Și vom vedea exemple despre asta.
Deci, dacă dumneavoastră - plugin-uri jQuery de fapt, ei recomanda jQuery
autori de utilizat dolar dot fn pentru a adăuga funcționalitate
la biblioteca jQuery.
Și vom fapt de gând să salt la - Deci, pe această pagină,
avem dolarul - Am inclus jQuery.
Și dacă faci dolar dot în consola
pe care am menționat aducerea te-ai trezit prin schimbare de comandă J
sau doar de gând să Vezi, Instrumente de dezvoltator, dezvoltatori
și merge la fila Surse.
[Inaudibil Observație]
Oh, sigur. Așa că atunci când am început să tastați într-o variabilă,
este auto-completat pentru mine ceea ce este disponibil acolo.
Așa că am scris în dolar și pot vezi Cred ca Chrome are unele
built-in dolari, dolar și dolar x.
Deci, acum vreau doar dolar și am pus într-un punct.
Și apoi îmi arată toate proprietățile
care sunt disponibile pe obiect jQuery.
Dar dacă fac dolar dot prototip,
Eu văd acum toate metodele pe care am folosit pentru a folosind
când am dolar, selectorul și apoi am lanț pe care cu,
Știi, adăugați clasă sau adăugați sau încețoșa sau oricare dintre altele asemenea.
Cei care sunt de fapt pe prototip
care sub capota jQuery creează o nouă instanță de sine
și ea un fel de ascunde toate aceste detalii de la tine.
Astfel la punctul în care am fost face din nou aici
cu funcția, aceștia ascunde de fapt prototip de la tine
și doar alias-l la dolar dot fn.
Astfel încât cei mai mulți oameni de fapt, nu-și dau seama
că există un prototip sub capota asta e. -
pe care le puteți robinet în și adăuga funcționalități suplimentare
pentru fiecare caz jQuery dacă doriți.
Deci, "noul" operatorul este într-adevăr un fel de dificil
pentru a înțelege la început.
Atunci când apelați o funcție cu "noi",
este o cu totul diferit mod de a apela functia
ca și cum tocmai te-a sunat o clar.
Deci, "noul" operatorul creează ceea ce se numește o nouă instanță
de un obiect sau o nouă exemplu de, vă puteți gândi
obiectului ca o clasă.
Și când se întâmplă acest lucru, valoarea din aceasta, care poate fi familiar
cu de la jQuery, au un fel de stabilit acest
a tot ceea ce este convenabil la momentul respectiv.
Ei au stabilit, de obicei, la nod curent DOM că ești
pe ca te duci prin ca fiecare sau ceva de genul asta.
Ei - Această valoare ar trebui să fie valoarea de instanță
pe care l-ați creat cu "noi", care include totul
pe lanțul prototip și toate dintre metodele pe care le-ar găsi
ca proprietăți prototip.
Deci, depinde de modul în care o funcție este numit,
ce valoarea este.
Și este într-adevăr confuz dacă sunteți nou la JavaScript.
Dar fiecare funcție care se numește are o - are la această valoare.
Astfel încât, chiar dacă nu ați creat un nou exemplu de ceva,
că aceasta presupune pentru a fi la nivel mondial.
Sau puteți apela o funcție folosind metoda apel
în cazul în care metoda aplică în JavaScript.
Puteți funcția și specifica ce acest lucru ar trebui să fie.
Astfel încât să puteți face dinamic, care este foarte puternic
dar, de asemenea, vă permite să faci lucruri care pot fi înșelătoare
și confuz pentru alți dezvoltatori
dacă nu sunt utilizați la faptul.
Și jQuery, aș argumenta face chiar mai confuz
prin ceea ce face convenabil și setarea
la nodul DOM curent.
Dar regula simplu să-și amintească care este valoarea acestui
atunci când sunteți în căutarea
la un apel este funcțional ceea ce a mai rămas din punct.
Deci, dacă aveți un obiect
și e ceva dot ceva este funcția
că sunteți de asteptare, atunci prima valoare este ceea ce valoarea
de acest lucru este.
Deci, aici este un exemplu de cod
unde Creez un nou obiect literal
care este doar obiectul creat cu acolade
și eu sunt setarea nume Bob
și apoi am o sayName Metoda de aici care -
astfel încât în ​​interiorul acestui sayName dacă eu nu x dot sayName,
valoarea este egală pentru x deoarece stânga
a punctului este de x. Deci, dacă Eu o numesc x dot sayName,
ar spune Bună Bob.
Și apoi un alt exemplu
în cazul în care eu sunt de fapt atribuirea x dot sayName, funcția
a variabilei Y, care, după cum am menționat
în JavaScript te poate atribui funcții
la variabile ori de câte ori doriți, este foarte flexibil în acest fel,
dar acum, când eu numesc Y, este pierdut contextul x.
Deci, aceasta este acum la nivel mondial sau dacă vă aflați în modul strict,
Cred că este nul sau nedefinit.
Dar - Deci, Y nu este ceea ce esti așteaptă aici dacă sunteți în căutarea
la x și te duci pentru a apela sayName,
vă așteptați acest nume ar trebui să fie Bob.
Dar dacă ați scos- obiectului și a numit-o
de la sine, acest lucru este acum la nivel mondial.
Și asta e ceea ce a fost menționat când vezi dolar dot acest lucru,
de multe ori nu cred că a ceea ce se intampla de fapt pe.
Dar jQuery fel de a lor propria limbă, domeniu specific
pentru a se ocupa cu acest lucru și aceasta nu este ceea ce v-ați obișnuit
la JavaScript.
Și eu subliniez acest lucru pentru că este foarte important
pentru scris, bine structurat cod orientat obiect
în JavaScript pentru a avea într-adevăr o bună înțelegere și înțelegere
de modul în care funcționează acest lucru și cât de lucrările model de obiect
și modul în care funcționează noul operator.
În caz contrar, veți termina cu spaghete jQuery
în cazul în care totul este un fel peste de tot
și doar se ocupă cu DOM.
Dacă se poate, de fapt Trimite JavaScript
într-un mod mai structurat, ea face mult mai ușor
pentru a lucra cu, pentru a sorta a separa preocupările
de care se ocupă cu actualizarea DOM și se ocupă
cu logica și codul actual.
Deci, haideți să aruncăm o privire la un câteva exemple în jurul valorii de care.
Așa că am câteva exemple aici.
Deci, acesta este doar un exemplu simplu a folosi un obiect JavaScript
și adăugând câteva funcții să-l și apoi crearea de sortare
a ca o aplicatie in miniatura.
Deci, este foarte simplu, de fapt.
Singurul lucru care-l face este la prima vi se solicită numele tău.
Asa ca voi spune Tim și apoi poate schimba numele de Bob.
Și asta e tot acest aplicare nu.
Dar ceea ce aș vrea să subliniez afară este modul în care o face.
Așa că am acest generator de nume obiect care are o metodă de start
care cere utilizatorului pentru numele lor
doar prin apel această askForName
care aici se nu prompt
dacă numele nu a fost însărcinată apoi cere-o din nou
prin apel la această askForName.
Și apoi o dată devine numele, se numește acest nume actualizare.
Deci, acest lucru, atunci setează nume de utilizator în tag-ul h1.
Și dacă numele nu este stabilit, se aruncă o eroare.
[Inaudibil Observație]
Oh, sigur. Deci, se stabilește nume de utilizator în tag-ul h1
prin apel setDisplayName care stabilește HTML
în numele container JS și Am prefixarea toate HTML meu
cu selectori JS doar pentru că este un obicei bun pentru a obține
în doar pentru a face nu atât de confuz
atunci când sunt utilizați selectoare, cum ar fi cursuri de identitate sau
pentru atât stilul, cât și pentru logica
în JavaScript aplicatii front-end.
Pentru că dacă aveți diferite grupuri de persoane care lucrează
pe baza de cod și tu au un selector acolo
că proiectantul decide pentru a schimba, deoarece E. -
nu arata foarte bine, astfel încât acestea doresc pentru a pune într-o nouă clasă și să ia
de a ta și te bazezi pe ea pentru scopuri de JavaScript,
apoi codul rupe.
Este bine de prefix și sorta
de spațiu de nume cum ar fi aproape Clase de JavaScript legate de
sau atribute cu un prefix de JS.
Deci, acest lucru este destul de simplu și puteți vedea
în toate aceste cazuri eu sunt de asteptare returnați la sfârșitul anului.
Deci, aceasta este un bun obicei pentru a obține în,
pentru a vă oferi o valoare de retur valabil.
În askForName Eu nu sunt pentru că are sens
care le-ar obține nume înapoi.
Dar ceea ce permite ca ce sa faci, atunci
dacă te vei întoarce această actualizare nume, se întoarce la valoarea
de setDisplayName care este revenind la valoarea de acest lucru.
Și care vă permite să sortați de lanț așa cum v-ați obișnuit
la jQuery prin returnarea valoarea acestui fiecare dată.
Aceasta se referă la obiecte de curent
astfel încât să-ar putea numi acest punct askForName punct setDisplayName
și-l va păstra Valoarea de acest lucru și vă permite
pentru a avea un lanț de frumos acolo.
Și apoi în - atât în acest al doilea exemplu.
[Pauză]
Bine.
OK. Deci, haideți să mergem mai departe și deschide consola
și du-te la tab-mi surse.
Vom pop asta, de fapt.
Deci, în dezvoltator Chrome instrumente pe care le-am menționat,
există această piesă pe dreapta și A -
puteți vedea acest semn de oprire deși în mod implicit, că e negru.
Dar atunci când mouse-ul peste el, ea spune: "Nu te opri pe excepții.
Faceți clic pe pauza pe toate excepțiile. "
Și atunci când faceți clic din nou, se pare albastru.
Și acum că oricând există o eroare de aruncat
în codul JavaScript, acesta va se oprește la momentul și vă permite
pentru a evalua ceea ce se întâmplă.
Astfel - Și asta e într-adevăr un instrument util Conceptul este pe cale să se arate.
Și apoi, dacă faceți clic pe din nou, se pare violet
și acest lucru este în mod normal ceea ce-l păstrați inch
Se rupe doar codul atunci când există o excepție
care nu a fost prins.
Deci, o mulțime de ori în jQuery pentru exemplu, ei nu încercați capturilor
pentru a testa dacă un browser sau nu are un fel de capacitate
și a continua de acolo.
Aceasta este doar atunci când există o eroare
care nu a fost prins într-o captură try.
Deci, haideți să încercăm și să prezinte un nume care este gol.
Deci, eu pot vedea că Codul este acum oprită
la metoda updateName și eu pot mouse-ul peste nume
și vezi că e gol de gol.
Nu este egal cu gol.
Deci, dacă nu arunca un nume nou eroare și acum pot să pas înapoi
prin funcția coloană și spune, "OK,
de unde a venit asta, "și vedea ceea ce este valoarea de client.
Așa că are metoda askForName,
setDisplayName start și updateName.
Și acesta este doar un foarte util Astfel, puteți vedea avea toate
variabilele care sunt disponibile în care domeniul de aplicare, precum și
ca variabilele de închidere, astfel ceva care este închis
de către această funcție.
Și așa că am putea vedea că - ceea ce este valoarea de client
și ce valoarea este.
Deci, acest lucru pentru că suntem în jQuery este egal
la elementul DOM curent.
Dar e foarte util pentru depanarea codului
pentru a rupe pe erori de acest gen.
O altă caracteristică a Chrome Inspector este
că în orice moment se poate faceți clic pe diferite linii
în primul rând și-l voi rupe la locurile
în cazul în care s-au stabilit puncte de întrerupere acestea sunt denumite în continuare.
Deci, dacă am faceți clic, linie devine albastră.
Deci, lasă-mă să continue execuție aici, OK, care a izbucnit.
Si acum sa stabilit nume la Alice și a lovit prezinte.
Așa că acum pot vedea chiar înainte de a ajunge la punctul
de actualizare a tot ceea ce, e acum sa oprit aici, așa că am putea vedea
că acest numele meu este Alice și apoi pot continua -
permiteți-mi să reîncărcați pagina.
Bine, deci acum că este incepand de la început din nou,
acesta a oprit la această linie și eu pot vedea
acest nume este în prezent nedefinit.
askForName este care funcționează este, astfel că, de asemenea, de multe ori util
dacă aveți funcții care sunt provenind din diferite fișiere
sau locuri diferite în cod, puteți vedea în cazul în care aceasta este,
și apoi sari la faptul că, ea se va evidenția.
Atât de bine pentru a obține în obiceiul de a folosi instrumente de depanare
că nu sunt doar consola jurnal punct.
OK, deci haideți să aruncăm o uita-te la un al doilea exemplu
ceea ce face mai mult uz de prototipuri cum am făcut aluzie la.
Deci, în acest exemplu,
vom crea un nou Funcția numit CS
și acest lucru este capitalizată astfel standardul de convenție
în JavaScript este dacă un Funcția se presupune a fi utilizat
ca un constructor, spre deosebire
la doar o normală funcție, îl valorifice.
Deci, am de capital CS și acest ia o courseId variabilă
și courseTitle care Am setat la acest courseId,
acest courseTitle în constructor.
Și apoi m-am stabilit, de asemenea, studenți și prelegeri ca matrice goale.
Deci, motivul pentru care te -
OK, deci prototipul proprietăți au fost apoi definite
aici cu - atât de șablon este doar o subliniere simplă
șablon, un șablon de subliniere fiind o modalitate prin care puteți -
similar cu șabloanele că David a menționat
pe server, puteți scrie doar o etichetă script
care nu este un JavaScript script ci un HTML Text
și ceea ce fac cu jQuery este -
nu ține aceste deschis, da, acolo mergem.
Cu jQuery, se face Valoarea HTML de care șablon
și apoi se trece prin subliniere biblioteci comunale
motor șablon.
Astfel încât documentația pentru că este aici
sub șablonul utilitate
dar, practic, puteți citi un pic mai mult despre el.
Dar se evaluează acest șir și se transformă într-o funcție
pe care le putem trece apoi de date în și-l numesc dinamic.
Următoarele două metode pe care le am sunt addStudent și addLecture.
Acestea pur și simplu adăugați-le la matrice interne pe care le-am stabilit
în constructor și atunci metoda de randare.
Deci, haideți să creeze noi exemplu de CS numit 164
care are acest curs numărul 164 și titlul.
Și apoi CS50 care are CS50 și intro la DM1
și apoi se adaugă câteva prelegeri studenților
și apoi apel CS50 face.
Și dacă am rula cod, așa Fac asta cu Eval.
Nu vrei cu adevărat să utilizați Eval, dar eu sunt doar un fel
de a lua toate JavaScript care este aici
și-l execută pe zbor.
Se face în acest șablon aceste noi cazuri
clasei CS care au proprietățile, așa că ne-am plecat
prin și făcut addLecture și addStudent pentru fiecare.
Și, după cum am menționat pentru că eu voi returna asta,
Pot lanț de fapt, aceste addLecture și addStudent apeluri
și va funcționa la fel de bine.
Altă caracteristică în JavaScript care este chiar mai util
pe partea de server unde într-adevăr la un moment dat
în cazul în care cererea dumneavoastră se mai mare nu știu unde ești
și e mai greu să se stabilească aceste puncte de întrerupere individuale
pe care am menționat în Inspectorul Chrome este
să utilizeze cuvântul cheie debugger.
Deci e doar D-E-B-U-G-G-E-R.
Și atunci când ați pus un depanator cuvinte cheie în codul dvs.
și aveți - acolo vom merge, doi Gs.
Când ai pus depanatorul cuvinte cheie în codul dvs.
și rulați un program de depanare
cum ar fi Chrome Inspector aici
sau Chrome partea de server Inspector, se spune JavaScript
pentru a opri executia pe care linia de cod și apoi vă permite
la pas prin restul de executarea de coduri.
Deci, dacă am faceți clic pe codul de a alerga aici, e acum de oprire
la această linie debugger și pot vezi OK, aici e valoarea CS50
și este un curs de ajuns titlu, desigur ID-ul,
ea are nu prelegeri, nici elevi.
Și apoi m-am pot pas prin întreaga addLecture,
Eu pot vedea-l împinge cu privire la aceste cursuri,
mouse-ul peste faptul că, "Hello World".
Pot de fapt, în consola de a face acest lucru astfel încât acesta este setat
la obiectul curent că ai intrat
Acest curs este "Hello World".
Și ține pas cu pas prin fel de mult cum vreau.
Dacă nu vreau să-și intensifice
în cauză un apel de funcție " Știu că ceea ce se întâmplă
pentru a face merge în addLecture, există acest buton aici
care spune: "Pas în următorii Funcția de apel, "și așa că am putea merge
la punctul fost eu sunt, poate, întrebam despre ceva.
Cum ar fi, de exemplu, 164 randare.
Deci, în acest moment, este urmează să fie prestate.
Eu pot vedea acest șablon este șablonul compilat.
Eu pot vedea în acest moment am ar trebui să aibă doi studenți
și două prelegeri.
Și apoi există prototipul lanț că am fost referindu-se la.
Deci, cel implicit care vine împreună cu doar un obiect
în JavaScript, în general,
vine cu două șir Valoarea de constructor.
Și apoi cei care Am adăugat pe mine
cu addLecture, addStudent și apoi proprietățile
care sunt unice pentru aceasta instanță a clasei
așa cum a fost invocată cu noua cheie.
Deci, hai sa facem doar un singur mai mult de exemplu, pe acest
și apoi vom pas într-o anumită mai multe lucruri interesante
pe partea de server.
Deci, haideți să mergem mai departe și deschide acest ultim exemplu, care este -
Să vedem, în cazul în care este codul?
Nu știu dacă acest lucru a fost.
Bine, bine, am putea sări peste peste acest cod, atunci de fapt -
oh stai, cred că am ratat foaia de stil pentru codul.
OK, așa că hai să facem acest lucru un pic mai mare.
În acest exemplu, eu sunt arătând un pic mai mult pe setarea
din lanțul de prototip,
astfel înființarea moștenire cu JavaScript.
Deci, în acest caz, ne-am un catalog care se va
a menține probabil mai multe cursuri.
Și astfel un catalog a o metode addCourse.
Așa că verifică dacă cursul care a trecut într-o instanță
desigur ca invocate cu noua cheie.
Deci, dacă încercați să trimiteți
în ceva diferit, ea va tipa la tine.
Metoda face, care va face fiecare dintre cursurile
prin compilarea șablon de mai jos.
Și avem cursul care accesul
în acest caz, clasa de baza pentru Cursuri de departament individuale.
Și în loc de stabilire a fiecărui
din punctul curs Metoda prototip dot
sau proprietate folosind prelungi ajutor în biblioteca de subliniere
pentru a sorta de apel extinde acest prototip cu toate
dintre aceste proprietăți, care este util, un pic mai ușor de citit.
Și apoi în jos aici faci ceea ce este cunoscut sub numele de setare
din lanțul de prototip.
Deci, aceasta este de fapt un pic dificil pentru oameni la început
și chiar tot ce a făcut acest lucru pentru o vreme, e un fel de greu
să-și încheie în jurul valorii de cap.
Dar nu lasa asta sa te sperii.
Deci, eu sunt înființarea unei noi -
o clasa cu totul nou obiect aici, CS.
Și în constructor,
Spun curs se aplică aceste argumente.
Deci argumente este o special Valoarea Cred ca ai putea spune
în JavaScript, cuvinte cheie care are toate
a tot ceea ce este a trecut de-a lungul este argumente
această funcție sunt disponibile cu argumentele apel,
cu cuvântul cheie argumente.
Deci, după cum am sunat cu curs dot se aplică,
Acesta este contextul actual cu care CS se numește.
Așa că atunci când am invoca cu noi este o - este o valoare de CS.
Și eu spun numesc acest Desigur, metoda de aici în sus.
Oh, îmi pare rău - numim aceasta Metoda de curs aici
dar a stabilit valoarea acestui să fie, indiferent de valoarea
în acest sens este chiar aici.
Astfel încât se aplică cheie permite să modificați un fel de stat
din aceasta, care este modul în jQuery este permis pentru a sorta de comutator
acest pe tine, ca te duci prin
și de a face un element DOM în loc de obiect jQuery.
Deci, acum am de gând să se stabilească o funcție temporară
care va apuca prototip al cursului.
Și un fel de setat la prototipul său
și apoi setați prototipul pe funcția obiectului CS
la o nouă instanță de asta.
Deci, practic eu sunt spunând în schimb -
dacă am făcut-o aici CS punct prototip este egal nou curs.
Atunci ar fi de asteptare totul
în această funcție constructor,
care nu ar fi neapărat vrut.
Deci, tot ce fac este un fel de a crea aproape
ca o funcție de surogat care va avea prototipul cursuri
pe el și un fel de imita prototip -
cursul, dar fără a face totul în constructorul
și a stabilit că la prototipul.
Și apoi eu sunt doar adăugând astfel departamentul
în acest caz este de computer Știință pentru obiectul CS.
Și apoi am un fel de Versiunea pod de a face asta.
Ea nu funcționează în IE9.
Deci, de aceea am vrut pentru a arăta un fel de modul în care -
ceea ce este de a face acest lucru sub capota.
Dar puteți seta în același mod
unde Econ este egal cu funcție Desigur, se aplică aceste argumente
și apoi spune Econ punct prototip este egal cu obiect punct CreateCourse
dot prototip.
Deci, se creează un nou obiect care este doar prototipul
pentru curs și apoi stabilit departamentul de acolo.
Deci, acum, hai să mergem stabilit o debugger aici și faceți clic pe alerga.
Acolo mergem.
Astfel CS164 putem vedea lanț prototip ne-am luat
proprietăți care au fost stabilit în constructor.
Astfel încât valorile de acestea, care au fost stabilite și apoi pe lanțul prototip
pentru obiect CS a avut Departamentul de Informatică stabilit.
Și apoi pe activului suport lanț de prototip,
atunci avem toate metode și proprietăți
care sunt unice pentru obiectul curs.
Și apoi ne-am obiectele de bază.
Astfel că un fel de rapid exemplu lanțului prototip.
Și, după cum puteți vedea aici, acolo sunt două valori pentru fiecare departament.
Deci, nu există departament de informatică
și apoi departament care nu sunt enumerate pe care i-am spus
ca valoare implicită aici.
Deci lanțul prototip este de fapt doar un individual
Lista de link-ul.
Și, în timp ce încearcă să găsi o proprietate,
va începe de la Valoarea de nivel superior.
Deci, ceea ce este definit în funcția de constructor
și apoi un fel de du-te în jos lanț prototip de acolo.
Deci, pentru că ea a găsit, așa -
în cazul în care chiar aici, am spus CS50 punct Department,
se va spune Informatică.
Dar dacă spun var -
[Pauză]
Dar dacă spun umaniste este egal cu nou curs
și apoi spun umaniste dot departament,
Voi vedea departament care nu sunt enumerate deoarece acesta a plecat la primul -
Am sa te uiti la prototipul lanț de aici, de fapt.
Deci, sa dus mai întâi la cursul obiect și am văzut nu e nimic
pe lanțul prototip la acest nivel pentru departamentul
sau pentru valorile departament, astfel apoi sare la nivelul următor,
cursul și aspectul transmite acolo și găsește-l.
Deci, doar un fel de se duce în jos de sus în jos
și că e un fel de ceva care este unic
despre JavaScript este pe care le poate schimba orice
acestor valori la un moment dat.
Deci, în constructorul sau într-o Metoda individuală pe obiect
dacă vreau să setați această Departamentul de ceva nou,
sau dacă chiar vreau să setați oricare dintre aceste funcții
, care sunt deja existente
de ceva nou, Sunt liber să fac asta.
Deci, acum am CS50 dot addLecture, arata ca asta.
Și dacă vreau să-l setat la CS50 addLecture doar egal
la funcția de gol.
Apoi, acum pot vedea că este tocmai sa schimbat complet
care nu ești în stare pentru a face alte limbi
în cazul în care aveți o mai strictă moștenire de clasă pe bază de
și tot ceea ce este un fel de configurat.
JavaScript este foarte, foarte flexibil în ceea ce privește acest lucru.
OK, hai să sari înapoi în diapozitive.
Deci, dacă, de exemplu tine ar dori întotdeauna o funcție
să aibă o anumită această valoare stabilită pentru el.
Puteți apela funcția de punct bind
și a stabilit ce valoarea de acest lucru ar trebui să fie.
Vă puteți gândi la ea ca -
"Am încercat să mă gândesc la o foarte bine, dar lumea exemplu ",
dacă doriți pentru a proteja codul dvs.
împotriva cineva potențial numindu-l cu o valoare
că nu ar fi aceasta.
Cum ar fi de exemplu, AJAX apel invers ca în exces sau de eroare.
Cei care nu sunt de obicei numite
cu o semantic bun valoare de acest lucru.
Si tu esti ca, "OK, am mereu doresc acest lucru să fie valoarea
obiectului curs că lucrez cu.
Sau punctul de vedere pe care am de lucru cu în codul meu
care reprezintă această Nod DOM, puteți seta -
puteți lega context la acest și atunci când este numit mai târziu
de jQuery și nu are o o valoare bună a acestei va lipi
pentru ceea ce-l delimitate cu.
Apoi, există funcția de apel au fost puteți specifica contextul
și specificați orice variabilă număr de argumente.
Și apoi există funcție se aplică pe care le puteți trece
în contextul și apoi, fie o matrice
sau argumentele obiecte care Am menționat după cum puteți vedea acolo.
Și argumentele în orice Funcția pe care o numim,
doar aveți posibilitatea să tastați în cuvântul "argumente"
și va avea toate argumentele.
Ea are o "lungime" proprietate
care este modul în care argumentele mai au fost de fapt, a trecut la faptul că metodele de
deoarece în JavaScript aveți posibilitatea să sortați de apel
cu numere variabile de argumente.
Este util pentru a spune în cazul în care acest lucru a avut un argument,
apoi urmați această cale cod.
În cazul în care a avut doi, s-ar putea doresc să urmeze o altă cale.
Acesta vă permite să aibă într-adevăr API-uri dinamice pentru metodele tale.
Puteți să vă gândiți de care cu jQuery
ca atunci când aveți dolar dot sau bind.
Și ea un fel de face lucruri diferite
dacă ai pus un argument sau două sau trei
sau ea începe cu o funcție.
Se utilizează argumentele proprietate
și argumentele lungime într-o mulțime de cazuri,
pentru a avea această magie funcționalitate întâmpla.
Lucrurile pe care nu se poate face cu argumente se folosi doar
în mod implicit ca o matrice.
Deci, vă pot spune argumente trei și setați-o la ceva
cum ai putea, folosind cesiune matrice.
Puteți utiliza - un lot metodelor subliniere
fie pentru colecții sau pentru lucrul cu tablouri,
puteți trece la argumente și se va realiza
că este un argumente obiect și sortare
a avea grijă de asta pentru tine.
Dar dacă doriți să utilizați argumente care sunt transmise
printr-o funcție ca o matrice,
puteți folosi subliniere dot două matrice.
Una dintre numărul de funcții utilitare
care sunt construite în a sublinia.