>> Ok, så i dag, Jeg kommer til å snakke
om Javascript og hvordan det er forskjellig fra andre språk
at du kan være pleide å like PHP.
Så i det siste foredraget på Mandag, snakket vi litt
om hva som er likt, hva er fortrolig mellom Java
og PHP eller Python eller Ruby eller C eller andre språk
at du allerede kjent med.
Men Java det faktisk har en virkelig unik ta
på objektmodell som gjør det liksom helt annerledes
enn de fleste språk som du kommer til å forholde seg til.
Så funksjoner er en slags
av lite verd konseptet i Javascript.
De er mye mer kraftfull enn de er i andre språk
fordi de kan i - for en grunn,
de er i stand til å være angitt som verdier.
Så akkurat her har vi var x lik funksjon
og det er en første klasse verdi som kan sendes
rundt som et argument.
Så du trenger ikke å erklære funksjon x
og bare bruke x i det omfang.
Du kan passere verdien av x hvor som helst i hele, vet du,
som et argument i en annen funksjon
hvor du kan modul eksport som David nevnt i node.
Så det neste punktet er
at en funksjon er en objekt i Javascript.
Så du kan faktisk sette egenskaper som verdier
på en funksjon og bare behandle det som om det er et objekt.
Så når du arbeider med jQuery, du vet, at dollaren
og deretter du passerer en velger inn i det
og påkalle den som en funksjon.
Men da får du også har dollaren dot AJAX.
Og det gjør ikke liksom være fornuftig hvis du tror
av en funksjon akkurat som å være noe du kan påberope
eller ring.
Men Java lar deg sette egenskaper på funksjoner
som statiske egenskaper med bare x dot someProp
som jeg påpekte det.
Det neste punktet som vi er kommer til å gå inn i en litt mer
i dybden er det faktum at funksjoner kan behandles
som klasser i Javascript.
Det er altså begrepet av denne nye operatøren
som skaper en ny forekomst av funksjon sammen med en slags
av lignende klassen lignende kropp som kommer sammen med det
og vi kommer til å gå inn i det litt mer,
det kalles prototype.
Og det er det som er merker Java svært unikt i forhold
til andre språk som er klassebaserte,
Javascript er en prototype basert.
Og så bare på bunnen der,
Funksjonen kan bare bli kalt tydelig som vi er vant til.
Så det er ikke noe nytt.
En annen ting som er unikt er
at arrays er faktisk objekter.
De er ikke som de er i PHP
der du bare lage en ny rekke.
Dette er faktisk en forkortelse for å si ny rekke.
Og utvalg er faktisk en underklasse av et objekt.
Så det er noe annerledes og jeg skal gå
inn i en litt mer detalj på det.
Og debugging evner
med Javascript er virkelig enestående så langt som jeg har sett.
Dette er et skjermbilde av Chrome Inspector
som vi kommer til å skal bruke for resten
av presentasjons dag.
Og for å få til dette, du bare gå til fil utviklerverktøy
og åpen Chrome Inspector eller du kan høyreklikke
og klikk showet element jeg tror det er på HTML-side
eller jeg tror det er kommandoen alternativ J åpner dette opp.
Men vi vil gå inn i dette, og du faktisk kan sette stoppunkter
som du kjører gjennom Javascript-kode og sortere
av evaluere hva det lokale variabler er, hva verdien
av dette er, og det gjør det måten lettere å feilsøke koden.
Og gjør ikke - dette er ikke begrenset til nettleser-side kode
men du kan faktisk kjøre en forekomst
av denne Chrome Inspector for din tjeneste side kode
som er veldig ryddig fordi du kan gå gjennom linje for linje
som en forespørsel kommer inn i din serveren og se hva som skjer
og leke med de variablene i konsollen her nede.
Så som jeg nevnte, Java er en prototype-basert språk
noe som betyr at det er et sett av standardverdier som er sort
av skjult for hver funksjon
i objektet dot prototype eiendom.
Så det er liksom en hash av bare forskjellige standardverdier
at når du starter en fungere med det nye nøkkelordet
de som er satt av standard som funksjoner
som er tilgjengelige på forekomsten.
Så det faktisk er virkelig effektiv for den -
det er en effektiv måte å lage objekter minne kloke
fordi Java runtime har bare å holde styr
av prototypen av objektet.
Den peker liksom til at
når du cretae en ny forekomst av en klasse.
Og du kan også etterligne arv som er kjent
i klasse-basert språk hvor du har liksom
som en dette strekker det, strekker at du kan etterligne
som i Javascript gjennom det som kalles
prototype kjede.
Og vi vil se eksempler om det.
Så hvis din - jQuery plugins faktisk de anbefaler jQuery
forfattere til å bruke dollar prikk fn for å legge til funksjonalitet
til jQuery biblioteket.
Og vi faktisk kommer til å hoppe til - Så, på denne siden,
vi har dollaren - Jeg inkludert jQuery.
Og hvis du gjør dollar prikk i konsollen
som jeg nevnte bringe deg opp gjennom kommandoskifte J
eller bare å gå til Vis, Utvikler, Utviklerverktøy
og gå til fanen Kilder.
[Hørbar Remark]
Oh sikker. Så da jeg begynte å skrive i en variabel,
det er automatisk fullføres for meg det som er tilgjengelig der.
Så jeg skrev inn i dollar, og jeg kan se jeg tror Chrome har noen
innebygde dollar, dollar og dollar x.
Så akkurat nå er jeg bare vil dollar og jeg satt i en prikk.
Og da det viser meg alle egenskapene
som er tilgjengelige på jQuery objekt.
Men hvis jeg gjør dollar dot prototype,
Jeg ser nå alle de metoder at jeg er vant til å bruke
når jeg har dollaren, velgeren og da jeg kjede seg at med,
du vet, legge klasse eller tilføye eller uskarpe eller noen av lignende.
De er alle faktisk på prototype
som under panseret jQuery skaper en ny forekomst av seg selv
og den slags skjuler alt disse detaljene fra deg.
Så poenget at jeg var gjør tilbake over her
med funksjonen, de faktisk skjule prototype fra deg
og bare alias det til dollar dot fn.
Slik at folk flest faktisk ikke skjønner
at det er en prototype under panseret that -
at du kan trykke inn og legge til ekstra funksjonalitet
til hver jQuery forekomst hvis du ønsker.
Så den "nye" operator er virkelig slags vanskelig
å forstå i starten.
Når du ringer til en funksjon med "ny",
det er en helt annen måten å kalle funksjonen
som om du bare kalt det tydelig.
Så den "nye" operator skaper det som kalles en ny forekomst
av et objekt eller en ny forekomst av, kan du tror
av objektet som klasse.
Og når dette skjer, verdien av dette, som kan bli kjent
med fra jQuery, de liksom sette dette
til det som er praktisk på den tiden.
De vanligvis sette den til nåværende DOM node som du er
på som du kommer gjennom som hver eller noe sånt.
De - Denne verdien er ment til å være verdien av forekomst
som du opprettet med "nye", som omfatter alt
på prototype-kjeden og alle av metodene som du vil finne
som prototype egenskaper.
Så det kommer an på hvordan en funksjon kalles
hva verdien av dette er.
Og det er veldig forvirrende hvis du er ny på Javascript.
Men hver funksjon som heter har en - har på denne verdien.
Så selv om du ikke har opprettet en ny forekomst av noe,
at det er antatt å være global.
Eller du kan ringe en funksjon ved hjelp av samtale-metoden
der gjelder metode i Javascript.
Du kan funksjonen og spesifisere hva dette skal være.
Så du kan gjøre det dynamisk, som er veldig kraftig
men også lar deg gjøre ting som kan være misvisende
og forvirrende å andre utviklere
hvis de ikke er bruker av det faktum.
Og jQuery, vil jeg hevde gjør det enda mer forvirrende
ved å gjøre det praktisk og sette den
til den aktuelle DOM node.
Men den enkle regelen å huske hva verdien av dette er
når du leter
på en funksjonell samtale er det som er igjen av dot.
Så hvis du har et objekt
og det er noe prikk noe er funksjonen
at du ringer deretter første verdi er hva verdien
dette er.
Så her er et kodeeksempel
der jeg skaper et nytt objekt bokstavelig
som er bare objektet opprettet med klammeparentes
og jeg sette navn til Bob
og da har jeg en sayName metode her som -
så inne i denne sayName hvis jeg gjør x dot sayName,
verdien av denne er lik til x fordi venstre
av dot er x. Så hvis Jeg kaller det x dot sayName,
det vil si Hei Bob.
Og så et annet eksempel
hvor jeg faktisk tildele x dot sayName, funksjonen
til den variable Y, som som jeg nevnte
i Java deg kan tilordne funksjoner
til variabler når du vil, det er veldig fleksibel på den måten,
men nå når jeg kaller Y, den har mistet sammenheng med x.
Så dette er nå global eller hvis du er i streng modus,
Jeg tror det er null eller udefinert.
Men - Så Y er ikke hva du er forventer her hvis du leter etter
på x og du kommer å ringe sayName,
du forventer dette navnet er ment å være Bob.
Men hvis du trakk den av objektet og kalte det
av seg selv, dette er nå global.
Og det er det jeg var nevne når du ser dollar dot dette,
du ofte ikke tenker på hva som faktisk skjer.
Men jQuery liksom har sin eget domene-spesifikke språk
for å håndtere dette, og det er ikke hva du er vant
til i Javascript.
Og jeg påpeke dette fordi det er veldig viktig
for å skrive godt strukturert objektorientert kode
i Javascript for å virkelig ha en god forståelse og forståelse
av hvordan dette fungerer og hvordan objektmodellen fungerer
og hvordan den nye operatøren fungerer.
Ellers vil du ende opp med jQuery spaghetti
hvor alt er liksom av over alt
og bare arbeider med DOM.
Hvis kan du faktisk skrive Java
på en mer strukturert måte, det gjør det mye enklere
å jobbe med, for å sortere av skille bekymringer
av behandling med oppdatering av DOM og håndtere
med selve logikk og kode.
Så la oss ta en titt på en noen eksempler rundt det.
Så jeg har noen eksempler her.
Så dette er bare et enkelt eksempel for å bruke et Javascript-objekt
og legge noen funksjoner til det og deretter lage sorter
som en miniatyrprogram.
Så det er veldig enkelt faktisk.
Det eneste som det gjør er først det ber navnet ditt.
Så jeg vil si Tim og deretter kan endre navn til Bob.
Og det er alt dette programmet gjør.
Men hva jeg vil gjerne påpeke ut er hvordan den gjør det.
Så jeg har dette navnet generator objekt som har en start-metoden
som ber brukeren for deres navn
ved bare å ringe dette askForName
som her nede det gjør teksten
hvis navn ikke ble tildelt da den ber om det igjen
ved å kalle dette askForName.
Og så når det blir navnet, det kaller denne oppdateringen navn.
Så dette så setter brukerens navn i h1-taggen.
Og hvis navnet er ikke satt, kaster det en feil.
[Hørbar Remark]
Oh sikker. Så det setter brukerens navn i h1 tag
ved å ringe setDisplayName som setter HTML
i JS navn container og Jeg prefixing alle mine HTML
med JS velgere bare fordi det er en god vane å komme
inn bare for å gjøre det ikke så forvirrende
når du bruker velgere som ID-er eller klasser
for både stil og for logikk
i Javascript front end applikasjoner.
Fordi hvis du har forskjellig grupper av personer som arbeider
på kodebasen, og du har en velger det
at designeren bestemmer å endre fordi it '-
ser ikke stor, så de vil å sette i en ny klasse og ta
ut din, og du er avhengig på det for Javascript formål,
deretter koden din bryter.
Det er godt å prefikset og sortere
som å namespace nesten Javascript-relaterte klasser
eller attributter med et prefiks av JS.
Så dette er ganske enkelt, og du kan se
i alle disse tilfellene er jeg kalle tilbake dette på slutten.
Så dette er en god vane å komme inn,
for å gi deg det en gyldig returverdi.
I askForName er jeg ikke fordi det er fornuftig
at du ville få navnet tilbake.
Men hva som gjør at du å gjøre da
hvis du kommer tilbake denne oppdateringen nevne, den returnerer verdien
av setDisplayName som er returnere verdien av dette.
Og som lar deg sortere av kjetting som du er vant
til i jQuery ved å returnere verdien av dette hver gang.
Dette refererer til dagens gjenstander
slik at du kan kalle dette prikk askForName dot setDisplayName
og det ville holde verdien av dette og lar deg
å ha en fin kjede der.
Og så i - så i dette andre eksempel.
[Pause]
OK.
OK. Så la oss gå videre og åpne opp konsollen
og gå til Kilder min kategorien.
Vi vil komme ut av dette faktisk.
Så i Chrome utvikleren verktøy som jeg nevnte,
det er dette stykket på høyre og en -
du kan se denne stoppskilt selv som standard, er det svart.
Men når du holder musen over den, det sier "Ikke ta pause på unntak.
Klikk på pause på alle unntak. "
Og når du klikker på det igjen, viser det blå.
Og nå når som helst at det er en feil kastet
i Javascript-koden, det vil stopper på det punktet og lar deg
å vurdere hva som skjer.
Så - Og det er virkelig en nyttig Konseptet er i ferd med å påpeke.
Og så hvis du klikker igjen, viser det lilla
og dette er vanligvis hva jeg holde det i.
Det bare bryter inn koden når det er et unntak
som ikke har blitt fanget.
Så mange ganger i jQuery for eksempel ikke de prøver fangster
å teste om en nettleser eller ikke har en slags evne
og fortsette derfra.
Dette er bare når det er en feil
som ikke har vært fanget i en prøve fangst.
Så la oss prøve og sende et navn som er blank.
Så jeg kan se at Koden er nå stoppet
på updateName metoden og jeg kan musen over navn
og se at det er tomt til tomt.
Det er det lik blank.
Så hvis ikke navnet kaste en ny feil og nå kan jeg gå tilbake
gjennom funksjon kolonne og si: "OK,
hvor kom dette fra, "og se hva verdien av klienten er.
Så det har askForName metode,
setDisplayName start og updateName.
Og dette er bare en veldig nyttig måten du kan se har all
variabler som er tilgjengelige i det omfang samt
som lukke variabler, så noe som er lukket
over av denne funksjonen.
Og så jeg kan se det - hva verdien av klienten
og hvilken verdien av denne er.
Så dette fordi vi er i jQuery er lik
til den aktuelle DOM element.
Men det er veldig nyttig for debugging kode
å bryte på feil som dette.
En annen funksjon i Chrome Inspector er
som på noe tidspunkt du kan Klikk på de forskjellige linjene
i raden, og det vil pause på de stedene
der du har satt stoppunkter de er referert til som.
Så hvis jeg klikker, jo linjen blir blå.
Så la meg fortsette kjøring her, OK, som brøt.
Og nå skal vi sette navn til Alice og trykk send.
Så nå kan jeg se selv før det kom til et punkt
med å oppdatere alt, er det nå stoppet rett her, så jeg kan se
at min dette navnet er Alice og da kan jeg fortsette -
la meg laste siden på nytt.
Ok, så nå som det er starter på start igjen,
det har stoppet på dette linje, og jeg kan se
det navnet er for tiden udefinert.
askForName er hvilken funksjon den er, så det er også ofte nyttig
hvis du har funksjoner som er kommer fra forskjellige filer
eller ulike steder i kode, kan du se hvor det er,
og deretter hoppe til det, det vil markere det.
Så godt å komme i vane for å bruke feilsøkingsverktøy
som ikke bare trøste prikk loggen.
OK, så la oss ta en se på et annet eksempel
som gjør mer bruk av prototyper som jeg hadde antydet.
Så i dette eksempelet,
vi skaper en ny funksjon kalt CS
og dette er kapitalisert slik konvensjonen standard
i Javascript er hvis en Funksjonen er ment å bli brukt
som en konstruktør, i motsetning
til bare en normal funksjon, kapitalisere deg det.
Så jeg har kapital CS og dette tar en variabel courseId
og courseTitle som Jeg satt til denne courseId,
dette courseTitle i konstruktøren.
Og da jeg også sette studentene og forelesninger som tomme matriser.
Så grunnen til at du -
OK, slik at prototypen eiendommer ble da definert
her nede med - slik mal er bare en enkel strek
mal, en understrek mal være en måte at du kan -
lik malene at David hadde nevnt
på serveren, kan du bare skrive et script tag
som ikke er en Java manus, men en tekst HTML
og hva jeg gjør med jQuery er -
det ikke holder disse åpen, ja, det vi går.
Med jQuery, og det får den HTML verdien av denne malen
og deretter kjører det gjennom streker nytte bibliotekene
mal motor.
Så dokumentasjonen for det er her nede
under verktøyet mal
men i utgangspunktet kan du lese litt mer om det.
Men det evaluerer denne strengen og gjør den til en funksjon
som vi kan deretter sende data inn og det kaller dynamisk.
De neste to metoder jeg har er addStudent og addLecture.
Disse bare legge dem til interne arrays som jeg har satt
i konstruktør og deretter Render metoden.
Så, la oss lage den nye forekomst av CS kalt 164
som har dette kurset nummer 164 og tittel.
Og så CS50 som har CS50 og intro til CS1
og deretter legge til noen foredrag studenter
og deretter ringe CS50 gjengi.
Og hvis jeg kjøre kode, så Jeg gjør det med Eval.
Du har aldri virkelig ønsker å bruke Eval, men jeg er bare en slags
av å ta alle Javascript som er her inne
og utfører det på sparket.
Den gjengir inn i dette mal disse nye tilfeller
av CS klassen som har egenskapene, så vi har gått
gjennom og gjort addLecture og addStudent til hver.
Og som jeg nevnte fordi jeg er tilbake dette,
Jeg kan faktisk kjede disse addLecture og addStudent samtaler
og det vil fungere like bra.
Den andre funksjonen i Javascript som er enda mer nyttig
på tjenersiden hvor du virkelig til enhver tid
hvis søknaden blir større vet ikke hvor du er
og det er vanskeligere å sette disse individuelle etappepunkt
som jeg nevnte i Chrome Inspector er
å bruke debuggeren søkeord.
Så det er bare D-E-B-U-G-G-E-R.
Og når du setter en debugger søkeord i koden
og du har - der vi går, to Gs.
Når du setter debugger søkeord i koden
og du kjører en debugger
slik som Chrome Inspektør her
eller tjenersiden Chrome Inspektør, forteller den Java
for å stoppe kjøringen på den linjen av koden og deretter den lar deg
å gå gjennom resten for utførelse av koder.
Så hvis jeg klikker kjøre kode her, er det nå stoppe
på dette debugger linje og jeg kan se OK, her er verdien av CS50
og det er en fikk kurs tittel, selvfølgelig ID,
det har ingen forelesninger, ingen studenter.
Og da kan jeg gå gjennom hele addLecture,
Jeg kan se det presser på disse forelesningene,
musen over det, "Hello World".
Jeg kan faktisk i konsollen gjør dette så dette er satt
til dagens objekt at du er i.
Dette foredraget er "Hello World".
Og holde spring gjennom så mye som jeg ønsker.
Hvis jeg ikke ønsker å gå
inn i et funksjonskall fordi Jeg vet hva som kommer
å gjøre å gå inn addLecture, det er denne knappen til høyre her
som sier "Kom over neste funksjonskallet, "og så jeg kan gå
til poenget var jeg kanskje lurer på om noe.
Som for eksempel 164 gjengi.
Så på dette punktet, er det kommer til å bli gjengitt.
Jeg kan se denne malen er kompilert mal.
Jeg kan se på dette punktet jeg skal ha to studenter
og to forelesninger.
Og så er det prototype kjede som jeg refererte til.
Så standard en som kommer sammen med bare et objekt
i Java generelt,
den kommer med to streng Verdien av konstruktøren.
Og så de som Jeg har lagt på meg selv
med addLecture, addStudent og deretter egenskapene
som er unike for denne forekomst av klassen
som det ble påkalt med det nye nøkkelordet.
Så la oss gjøre bare én Enda et eksempel på dette
og så skal vi gå til noen mer interessante ting
på tjenersiden.
Så la oss gå videre og åpne Dette siste eksempelet som er -
la oss se, hvor er koden?
Jeg vet ikke hvor dette gikk.
OK, vel, vi kan bare hoppe over løpet av denne koden deretter faktisk -
oh holde på, jeg tror jeg savnet stilarket for koden.
OK, så la oss gjøre dette en litt større.
I dette eksempelet viser jeg litt mer av innstillingen
opp prototypen kjeden,
så å sette opp arv med Javascript.
Så i dette tilfellet, har vi en katalog som kommer
å antagelig opprettholde flere kurs.
Og så en katalog har en addCourse metoder.
Så det sjekker om kurset som er gått i er en forekomst
selvfølgelig som påberopes med det nye nøkkelordet.
Så hvis du prøver og sende
i noe annet, det vil kjefte på deg.
Render metoden som vil gjengi hvert av kursene
ved å kompilere sin mal nedenfor.
Og vi har kurset som tilgang
i dette tilfelle baseklasse for enkelte avdeling kurs.
Og i stedet for å sette hver
av kurset dot prototype dot metode
eller eiendom ved hjelp av forlenge helper i strek biblioteket
å sortere av samtalen forlenge denne prototypen med alle
av disse egenskaper, som er stoff, litt lettere å lese.
Og deretter ned her gjør det som kalles å sette
opp prototypen kjeden.
Så dette er faktisk litt vanskelig for folk på første
og selv fortsatt å ha gjort dette for en stund, det er liksom vanskelig
å vikle hodet rundt.
Men ikke la det skremme deg.
Så jeg setter opp en ny -
en helt ny klasse innvende her, CS.
Og i konstruktøren,
Jeg sier selvfølgelig Bruk denne argumenter.
Så argumenter er en spesiell verdien jeg antar du kan kalle det
i Javascript, den søkeord som har alt
av alt som er gått sammen er argumenter
at funksjonen er tilgjengelig med argumentene ringe,
med argumenter nøkkelordet.
Så som jeg ringer med kurs dot gjelder,
Dette er den gjeldende konteksten som CS blir kalt.
Så når jeg påberope det med ny det er en - det er en verdi av CS.
Og jeg sier kalle dette Kurset metoden opp her.
Oh sorry - kaller dette Kurset metoden her
men sett verdien av dette å være uansett verdien
av dette er rett her.
Så det gjelder søkeord, kan du liksom endre tilstanden
av dette som er hvordan jQuery får lov til å sortere bryter
ut dette på deg som du går gjennom
og gjøre en DOM elementer i stedet for den jQuery objektet.
Så nå kommer jeg til å sette en midlertidig funksjon
som vil ta tak i prototype av kurset.
Og liksom sette den til sin prototype
og deretter satt prototypen på CS-funksjonen objekt
til en ny forekomst av den.
Så i utgangspunktet er jeg sier i stedet -
hvis jeg ned her gjorde CS prikk prototype tilsvarer ny kurs.
Da ville det være ringer alt
i denne konstruktørfunksjon,
som jeg ikke ville nødvendigvis ville.
Så alt jeg gjør er slags skaper nesten
som en surrogat funksjon som vil ha kurs prototype
på den og liksom ligne prototype -
kurset, men uten å gjøre alt i konstruktør
og satt som til prototype.
Og da er jeg bare legge så avdelingen
i dette tilfellet er Computer Science for CS objekt.
Og så har jeg en slags bridge versjon av å gjøre det.
Det fungerer ikke i IE9.
Så det er derfor jeg ønsket å vise liksom hvordan -
hva dette gjør under panseret.
Men du kan sette den opp på samme måten
hvor Econ lik funksjon selvfølgelig bruke disse argumentene
og deretter si Econ dot prototype tilsvarer objekt dot CreateCourse
dot prototype.
Så det skaper et nytt objekt som er bare prototypen
for kurset, og deretter satt avdelingen der.
Så nå la oss bare gå stille en debugger her og klikk på sikt.
Det vi går.
Så CS164 vi kan se prototype kjeden vi har fått
egenskaper som var satt i konstruktøren.
Så verdier av disse som ble satt og deretter på prototype-kjeden
for CS objekt det hadde avdeling Informatikk satt.
Og så på den underliggende prototype kjeden,
vi da har all metoder og egenskaper
som er unike for kurset objekt.
Og så har vi base objekter.
Så den slags en rask eksempel på prototype-kjeden.
Og som du kan se her, er det er to verdier per avdeling.
Så det er avdelingen i informatikk
og deretter avdeling ikke oppført som jeg sa
som standardverdi her.
Så prototypen kjeden er faktisk bare en enkeltvis
linklisten.
Og som den prøver å finne en eiendom,
det vil starte på toppnivå verdi.
Så hva er det som er definert i konstruktøren funksjon
og så liksom gå ned prototype kjeden derfra.
Så fordi det finnes, så -
hvis akkurat her, sier jeg CS50 dot avdeling,
det vil si Computer Science.
Men hvis jeg sier Var -
[Pause]
Men hvis jeg sier humaniora tilsvarer ny kurs
og da jeg si humaniora dot-avdelingen,
Jeg vil se avdelingen ikke oppført fordi det gikk til først -
Jeg kan se på prototypen kjeden her faktisk.
Så det gikk først til kurset objekt og så er det ingenting
på prototype-kjeden på dette nivået for avdelingen
eller for avdelingen verdiene slik så den hopper til neste nivå,
kurset og utseende videresende det og finner det.
Så det bare liksom som går ned fra toppen og ned
og det er liksom noe som er unikt
om Java er at du kan endre en hvilken som helst
av disse verdier på enhver tid.
Så i konstruktør eller i en individuelle metode på objektet
hvis jeg ønsker å sette dette avdeling til noe nytt,
eller om jeg selv ønsker å sette noen av disse funksjonene
som allerede eksisterer
til noe nytt, Jeg er fri til å gjøre det.
Så akkurat nå har jeg CS50 prikk addLecture, ser slik ut.
Og hvis jeg ønsker å sette den til CS50 addLecture bare lik
til tomt funksjon.
Så nå kan jeg se det er bare helt forandret
som du ikke er i stand å gjøre et annet språk
der du har en strengere klassebaserte arv
og alt er liksom satt opp.
Javascript er veldig, veldig fleksibel med hensyn til det.
OK, la oss hoppe tilbake i lysbildene.
Så hvis for eksempel du vil alltid ha en funksjon
å ha en spesiell denne verdien satt for det.
Du kan ringe funksjon dot bind
og angi hva verdien av dette bør være.
Du kan tenke på det som -
"Jeg prøver å tenke på en god virkelige verden eksempel, men ",
hvis du ønsker å beskytte koden
mot noen potensielt kaller det med en verdi
det ville ikke være dette.
Som for eksempel AJAX tilbakeringing som overflødig eller feil.
De er vanligvis ikke kalt
med en god semantisk Verdien av dette.
Og du er liksom: "OK, jeg har alltid ønsker at dette skal være verdien
av kurset objekt at jeg jobber med.
Eller visningen som jeg er arbeider med i min kode
som representerer dette DOM node, kan du stille inn -
du kan binde kontekst til dette og deretter når det heter senere
av jQuery og det har ikke en god verdien av dette det vil holde
til hva du avgrenset det med.
Så er det funksjon samtale ble du kan angi kontekst
og angi hvilken som helst variabel antall argumenter.
Og så er det funksjon gjelder som du kan passere
i sammenheng og deretter enten en matrise
eller argumentene objekter som Jeg nevnte som du ser der.
Og argumentene i en hvilken som helst funksjon som du kaller,
du kan bare skrive inn ordet "argumenter"
og det vil ha alt argumentene.
Den har en "lengde"-egenskap
som er hvordan mai argumenter var faktisk gått til at metoder
siden i Javascript du kan sortere på samtale
med variable tall av argumenter.
Det er nyttig for å si hvis dette hadde ett argument,
følg denne koden banen.
Hvis det hadde to, kanskje du ønsker å følge en annen måte.
Det gjør at du kan ha virkelig dynamiske API-er for dine metoder.
Du kan tenke på at med jQuery
som når du har dollar prikk på eller bind.
Og den slags gjør forskjellige ting
om hvorvidt du sette en argument eller to eller tre
eller starte den med en funksjon.
Det er ved hjelp av argumentene eiendom
og argumentene lengde i mange tilfeller
å ha denne magiske funksjonalitet skje.
De tingene du ikke kan gjøre med argumentene er å bruke det bare
som standard som en matrise.
Så du kan si argumenter tre og sette den til noe
som du kan ved hjelp matrisen oppdraget.
Du kan bruke den - mye av understreking metoder
for enten samlinger eller for å arbeide med matriser,
du kan passere i argumenter og det vil innse
at det er en argumentasjon objekt og sortere
av å ta vare på det for deg.
Men hvis du ønsker å bruke den argumenter som er gått
gjennom en funksjon som en matrise,
du kan bruke understrek dot to array.
En av antallet av nyttefunksjoner
som bygger på å understreke.