>> Alle reg, so vandag, Ek gaan om te praat
oor JavaScript en hoe dit is verskil van ander tale
dat jy kan wees gebruik PHP te hou.
So in die laaste lesing oor Maandag het ons gepraat het 'n bietjie
oor wat soortgelyke, wat is vertroud tussen JavaScript
en PHP of Python of Ruby of C of ander tale
dat jy reeds vertroud is met.
Maar JavaScript dit eintlik het 'n baie unieke neem
op die voorwerp model wat maak dit soort van heeltemal verskillende
as die meeste tale wat jy gaan om te hanteer.
So funksies is 'n soort
van geïsoleerd konsep in JavaScript.
Hulle is manier om meer kragtig as hulle is in ander tale
omdat hulle kan in - vir een rede,
hulle is in staat te wees stel as waardes.
So hier het ons 'n var x gelyk funksie
en dit is 'n eerste klas waarde wat geslaag word
om as 'n argument.
So jy hoef nie te verklaar funksie x
En net gebruik x in die omvang.
Jy kan die waarde van x slaag enige plek in die hele, jy weet,
as 'n argument in 'n ander funksie
waar jy kan module uitvoer Dawid in node genoem.
So die volgende punt is
dat 'n funksie is 'n beswaar in JavaScript.
So kan jy eintlik stel eienskappe as waardes
op 'n funksie en net te behandel dit soos dit is 'n voorwerp.
So wanneer jy werk met jQuery, jy weet, wat dollar
en dan moet jy slaag 'n selector in dit
en roep dit as 'n funksie.
Maar dan moet jy ook het dollar dot Ajax.
En dit nie soort van sin maak as jy dink
van 'n funksie net as iets wat jy kan lei
of bel.
Maar JavaScript kan jy stel eiendomme op funksies
as statiese eienskappe met net x dot someProp
as ek daarop gewys daar.
Die volgende punt wat ons is gaan om te gaan in 'n bietjie meer
in diepte is die feit dat funksies behandel kan word
as klasse in JavaScript.
So is daar die konsep van hierdie nuwe operateur
wat 'n nuwe geval van die funksie saam met 'n soort
van soos klas-agtige liggaam wat kom saam met dit
en ons gaan om te gaan in dit 'n bietjie meer,
dit is bekend as die prototipe.
En dit is wat is fabrikate JavaScript baie unieke in vergelyking
na ander tale wat klas-gebaseerde,
JavaScript is 'n prototipe gebaseer is.
En dan net op die onderkant is daar,
funksie kan net genoem word duidelik as wat ons gewoond is.
So dit is niks nuuts nie.
Nog 'n ding wat uniek is
dat skikkings is eintlik voorwerpe.
Hulle is nie soos hulle is in PHP
waar jy net ' 'n nuwe skikking.
Dit is eintlik 'n snelskrif om te sê nuwe skikking.
En skikking is eintlik 'n subklas van 'n voorwerp.
So dit is iets verskillende en ek sal gaan
in 'n bietjie 'n meer detail op daardie.
En die opsporing vermoëns
met JavaScript is regtig ongeëwenaard so ver as wat ek gesien het.
Dit is 'n kiekie van die Chrome Inspekteur
wat ons gaan word met behulp van die res
van die aanbieding van vandag.
En te kry om hierdie, jy moet net gaan ontwikkelaar gereedskap te dien
en oop Chrome Inspekteur of jy kan regs klik
en klik show element ek dink dit is op HTML bladsy
of ek dink dit is opdrag Opsie J open dit op.
Maar ons gaan in hierdie en jy kan eintlik stel inspeksiepunte
as jy loop deur die JavaScript-kode en sorteer
van evalueer wat die plaaslike veranderlikes, wat die waarde
hierdie is en dit maak dit manier makliker om te ontfout kode.
En moenie - dit is nie beperk is tot die leser-kant-kode
maar jy kan eintlik loop 'n geval
van hierdie Chrome Inspekteur vir u diens kant kode
Dit is regtig 'n netjiese, want jy kan stap vir stap deur lyn deur die lyn
as 'n versoek kom in jou bediener en kyk wat gebeur
en speel met die veranderlikes in die konsole hier.
So as ek genoem het, JavaScript is 'n prototipe-gebaseerde taal
wat beteken dat daar is 'n stel van die standaard waardes wat soort
verborge vir elke funksie
in die voorwerp dot prototipe eiendom.
So dit is soort van 'n gemors van net ander standaard waardes
dat wanneer jy roep 'n funksioneer met die nuwe navraag,
diegene is wat deur standaard as funksies
wat beskikbaar is op die geval.
So wat eintlik is werklik doeltreffend te wees vir die -
dit is 'n doeltreffende manier skep voorwerpe geheue wyse
omdat die JavaScript runtime net om tred te hou
van die prototipe van die voorwerp.
Dit wys soort van daardie
wanneer jy 'n nuwe cretae geval van 'n klas.
En jy kan ook naboots erfenis Soos bekend
in die klas-gebaseerde tale waar jy soort
van soos 'n hierdie strek dat strek wat jy kan naboots
wat in JavaScript deur wat genoem word die
prototipe ketting.
En ons sal sien voorbeelde oor dat.
So as jou - jQuery plugins eintlik hulle beveel jQuery
skrywers dollar dot te gebruik FN funksies by te voeg
die jQuery biblioteek.
En ons is eintlik gaan spring na - So, op hierdie bladsy
ons het die dollar - Ek ingesluit jQuery.
En as jy dit doen dollar dot in die konsole
wat ek genoem bring julle deur command verskuiwing J
of net gaan na View, Ontwikkelaar, ontwikkelaar gereedskap
en gaan na die blad Bronne.
[Onhoorbaar Nota]
Ag seker nie. So toe ek begin om te tik in 'n veranderlike,
dit is die motor-voltooi vir my Wat is daar beskikbaar.
So ek getik in dollar en ek kan sien ek dink Chrome het 'n paar
ingeboude dollar, dollar en die dollar x.
So nou wil ek net dollar en ek sit in 'n dot.
En dan is dit wys vir my al die eienskappe
wat beskikbaar is op die jQuery voorwerp.
Maar as ek doen dollar dot prototipe,
Ek sien nou al die metodes dat ek gebruik om te gebruik
wanneer ek het die dollar, selector en dan ketting ek af dat met,
jy weet, voeg klas of voeg of vervaag of enige van die wil.
Dit is alles eintlik op die prototipe
wat onder die kap van die jQuery skep 'n nuwe geval van self
en dit soort van huide al dié besonderhede van jou.
So die punt dat ek was maak weer hier
met die funksie, het hulle eintlik prototipe vir julle
en net alias dit dollar dot FN.
So die meeste mense eintlik besef nie
dat daar 'n prototipe onder die enjinkap that's -
dat jy kan tik in en voeg meer funksies
aan elke jQuery byvoorbeeld As jy wil.
So het die "nuwe" operateur regtig soort van moeilike
om te verstaan ​​op die eerste.
Wanneer jy na 'n funksie met 'n "nuwe",
dit is 'n heeltemal ander manier van die roeping van die funksie
asof jy net genoem dit duidelik.
So het die "nuwe" operateur skep wat 'n nuwe geval genoem
van 'n voorwerp of 'n nuwe geval van, kan jy dink
van die voorwerp as 'n klas.
En wanneer dit gebeur, die waarde van hierdie wat bekend sal wees
met van jQuery, Hulle het soort van soos hierdie
na wat is gerieflik in die tyd.
Hulle het gewoonlik sit dit aan die huidige DOM knoop dat jy
as jy gaan deur soos elk of iets soos dit.
Hulle - Hierdie waarde is veronderstel die waarde van die geval te wees
wat jy geskep het met 'n "nuwe", Dit sluit alles
op die prototipe ketting en al van die metodes wat jy wil vind
as prototipe eienskappe.
So dit hang af van hoe 'n funksie genoem word,
wat die waarde daarvan is.
En dit is regtig verwarrend As jy nuut is tot JavaScript.
Maar elke funksie wat genoem het 'n - het by hierdie waarde.
So selfs as jy nog nie geskep 'n nuwe geval van iets,
dat dit word aanvaar tot globale wees.
Of jy kan 'n funksie roep gebruik van die oproep metode
waar die toepassing metode in JavaScript.
Jy kan die funksie en spesifiseer wat dit behoort te wees.
So jy kan dit dinamiese, Dit is regtig 'n kragtige
maar ook kan jy om te doen dinge wat kan misleidend wees
en verwarrend ander ontwikkelaars
as hulle gebruik nie die feit.
En jQuery, sou ek argumenteer maak dit selfs meer verwarrend
deur dit gerieflik en die opstel van dit
om die huidige DOM knoop.
Maar die eenvoudige reël om te onthou wat die waarde van hierdie
wanneer jy op soek is na
op 'n funksionele oproep is wat oorbly van die dot.
So as jy 'n voorwerp
en dit is iets dot iets is die funksie
dat jy dan 'n beroep is die eerste waarde is wat die waarde
hiervan is.
So hier is 'n kode voorbeeld
waar ek skep 'n nuwe voorwerp letterlike
wat net die voorwerp geskep met die krulhakies
en ek die opstel naam Bob
en dan het ek 'n sayName metode hier wat -
so binne hierdie sayName as ek nie x dot sayName,
die waarde van hierdie is gelyk om x omdat die linker
van die dot is x. So as Ek noem dit x dot sayName,
dit sou hallo sê Bob.
En dan nog 'n voorbeeld
waar ek eintlik toeken x dot sayName, die funksie
die veranderlike Y, wat soos ek genoem
in JavaScript jy funksies kan toewys
veranderlikes wanneer jy wil, dit is regtig buigsaam dat die pad,
maar nou as ek roep Y, dit verloor die konteks van x.
So, dit is nou die globale of As jy in 'n streng af,
Ek glo dit is null of ongedefinieer.
Maar - So Y is nie wat jy verwag hier as jy op soek is na
in x en jy gaan sayName te roep,
jy hierdie naam is verwag veronderstel is om te wees Bob.
Maar as jy trek dit af die voorwerp en dit genoem
deur self, dit is nou die globale.
En dit is wat ek noem wanneer jy sien dollar dot dit,
jy dikwels nie dink nie wat eintlik aan die gang.
Maar jQuery soort het hul eie domein-spesifieke taal
vir die hantering van hierdie en dit is nie wat jy gebruik
om in JavaScript.
En ek wys dit uit want dit is werklik belangrik om
vir die skryf van goed gestruktureerde objekgeoriënteerde kode
in JavaScript om werklik ' 'n goeie begrip en kennis
van hoe dit werk en hoe die voorwerp model werke
en hoe die nuwe operateur werk.
Andersins, sal jy uiteindelik met jQuery spaghetti
waar alles is 'n soort van oor die hele plek
en slegs met die DOM.
As jy kan eintlik skryf JavaScript
in 'n meer gestruktureerde mode, dit maak dit 'n baie makliker
mee te werk, te sorteer van skei die kommer
van die hantering van die opdatering van die DOM en die hantering
met die werklike logika en kode.
So laat ons 'n blik op 'n paar voorbeelde rondom dit.
So ek het 'n paar voorbeelde hier.
So dit is net 'n eenvoudige voorbeeld van die gebruik van 'n JavaScript voorwerp
en die toevoeging van 'n paar funksies om dit te skep en dan soort
van soos 'n miniatuur aansoek.
So dit is baie eenvoudig eintlik.
Die enigste ding wat dit doen, is op die eerste dit vra jou naam.
So ek sal sê Tim en dan moet jy kan jou naam verander na Bob.
En dit is al wat hierdie aansoek doen.
Maar wat ek wil om te wys is hoe dit werk dit.
So ek het hierdie naam generator voorwerp wat 'n aanvang metode
wat vra die gebruiker vir hul naam
deur net noem hierdie askForName
wat hier is dit doen die vinnige
indien die naam is nie wat dan vra dit weer vir dit
deur die roeping van hierdie askForName.
En dan keer dit kry die naam, dit noem hierdie update naam.
So dit stel dan die gebruiker se naam in die H1 tag.
En as die naam is nie stel, gooi dit 'n fout.
[Onhoorbaar Nota]
Ag seker nie. So dit stel die gebruiker se naam in H1 tag
deur te bel setDisplayName waarin die HTML
in die JS naam houer en Ek is die morfeem al my HTML
met JS keurders net omdat dit is 'n goeie gewoonte om te kry
in net om te dit nie so verwarrend
wanneer jy met keurders soos ID's of klasse
vir beide styl en vir logika
in jou JavaScript voorkant aansoeke.
Want as jy het verskillende groepe mense werk
op die kode basis en jy 'n selector daar
dat die ontwerper besluit te verander, want it's -
nie groot lyk nie, so hulle wil om te sit in 'n nuwe klas en neem
uit joune en jy vertrou dit vir doeleindes JavaScript,
dan jou kode breek.
Dit is goed om te prefix en sorteer
van soos namespace amper JavaScript-verwante klasse
of eienskappe met 'n voorvoegsel van JS.
So dit is redelik eenvoudig, en jy kan sien
In al hierdie gevalle is ek roep terug hierdie aan die einde.
So dit is 'n goeie gewoonte te kry in,
om te gee dit 'n geldig terugkeer waarde.
In askForName ek is nie want dit maak sin
dat jy sal terug te kry naam.
Maar wat dit toelaat om te doen nie
As jy hierdie werk terug noem, dit is die terugkeer van die waarde
van setDisplayName wat die terugkeer van die waarde van hierdie.
En wat dit moontlik maak om jou te sorteer van die ketting as jy gebruik
om in jQuery deur terug die waarde van hierdie elke keer.
Dit verwys na die huidige voorwerpe
sodat jy kan dit dot noem askForName dot setDisplayName
en dit sou hou die waarde van hierdie en kan jy
'n mooi ketting te hê daar.
En dan in - so in hierdie tweede voorbeeld.
[Pouse]
Alle regte.
OK. So laat ons gaan voort en maak die konsole
en gaan na my blad Bronne.
Ons sal dit uit pop eintlik.
So in die Chrome ontwikkelaar gereedskap wat ek genoem het,
daar is 'n stuk op die reg en 'n -
jy kan hierdie stopstraat sien Hoewel by verstek, dit swart is.
Maar wanneer jy die muis oor dit, is dit sê: "Moenie breek op uitsonderings.
Klik op die pouse op al uitsonderings. "
En wanneer jy dit kliek weer, dit blyk blou.
En nou tyd dat daar is 'n fout gegooi
in jou JavaScript kode, dit sal stop by die punt en laat jou
te evalueer wat aangaan.
So - en dit is regtig 'n nuttige konsep is om te wys.
En dan as jy kliek weer, dit blyk pers
en dit is normaalweg wat ek hou dit in
Dit breek net die kode wanneer daar 'n uitsondering
wat nie gevang.
So 'n baie keer in jQuery vir Byvoorbeeld, het hulle probeer om vangste
te toets of 'n leser het 'n soort van vermoë
en gaan voort van daar af.
Dit is slegs wanneer daar is 'n fout
wat nog nie vasgevang in 'n drie vangs.
So kom ons probeer en stuur 'n naam wat is leeg.
So ek kan sien dat die kode is nou gestaak
by die updateName metode en ek kan die muis oor die name
en sien dit is leeg leeg.
Daar is dit gelyk aan leeg.
So as dit nie noem gooi 'n nuwe foute en nou kan ek terug te stap
deur die funksie kolom en sê, "OK,
waar het dit vandaan kom, "en sien wat die waarde van die kliënt is.
So het dit askForName metode,
setDisplayName begin en updateName.
En dit is net 'n baie nuttige So kan jy sien al die
veranderlikes wat beskikbaar is in daardie omvang asook
as die sluiting van veranderlikes, so enigiets wat gesluit is
oor hierdie funksie.
En so kan ek sien dat - wat die waarde van die kliënt is
en wat die waarde daarvan is.
So hierdie "want ons is in jQuery is gelyk
om die huidige DOM element.
Maar dit is regtig nuttig vir die opsporing kode
te breek op foute soos hierdie.
Nog 'n kenmerk van die Chrome Inspekteur is
wat op enige punt wat jy kan Klik op die verskillende lyne
in die ry en dit sal breek op die plekke
waar jy inspeksiepunte het ' hulle verwys as.
So as ek op die lyn kleur blou.
So laat my voortgaan om die uitvoering hier, OK, wat gebreek het.
En nou, laat ons op die naam Alice en druk Stuur.
So nou kan ek sien selfs voordat dit het tot die punt
van die opdatering alles, dit is nou gestop reg hier, sodat ek kan sien
dat my hierdie naam is Alice en dan kan ek voortgaan -
laat my herlaai die bladsy.
Alle reg, so nou dat dit begin op weer te begin,
dit het gestop by hierdie lyn en ek kan sien
daardie naam is tans undefined.
askForName is wat dit funksioneer is, so dit is dikwels ook nuttig
As jy funksies wat wat uit verskillende lêers
of verskillende plekke in die kode, kan jy sien waar dit is,
en dan na die betrokke, dit sal dit lig.
So goed om te kry in die gewoonte van die gebruik van debugging gereedskap
wat nie net troos dot log.
OK, so laat ons neem 'n kyk na 'n tweede voorbeeld
wat maak meer gebruik van prototipes as ek na verwys het.
So in hierdie voorbeeld,
ons is die skep van 'n nuwe funksie genoem CS
en dit is gekapitaliseer So het die konvensie standaard
in JavaScript is as 'n funksie is veronderstel om gebruik te word
as 'n konstruktor, in teenstelling
om net 'n normale funksie, jy kapitaliseer nie.
So ek het kapitaal CS en dit neem 'n veranderlike courseId
en Cursus wat Ek het na hierdie courseId,
hierdie Cursus in die konstruktor.
En dan het ek ook studente en lesings as leë skikkings.
So die rede dat jy -
OK, so die prototipe eiendomme is dan gedefinieer
hier met - so sjabloon is net 'n eenvoudige underscore
sjabloon, 'n underscore sjabloon 'n manier wat jy kan -
soortgelyk aan die templates Dawid het genoem
op die bediener, kan jy net 'n script skryf tag
wat nie 'n JavaScript script, maar 'n teks HTML
en wat ek doen met jQuery is -
dit nie die hou oop, ja, daar gaan ons.
Met jQuery, is dit om die HTML waarde van daardie sjabloon
en dan loop dit deur die beklemtoon nut biblioteke
sjabloon enjin.
So die dokumentasie want dit is hier
onder die nut sjabloon
maar basies wat jy kan lees 'n bietjie meer oor dit.
Maar dit evalueer hierdie string en draai dit in 'n funksie
wat ons kan dan data slaag in, en dit dinamies noem.
Die volgende twee metodes wat ek het is addStudent en addLecture.
Hierdie voeg dit net om die interne skikkings wat ek stel
in die konstruktor en dan is die lewer metode.
So, laat ons die skep van die nuwe geval van CS genoem 164
wat hierdie kursus getal 164 en die titel.
En dan CS50 wat CS50 en inleiding tot CS1
en voeg dan 'n paar doseer studente
en dan bel CS50 lewer.
En as ek hardloop kode, sodat Ek doen wat met Eval.
Jy het nog nooit regtig wil gebruik die Eval, maar ek is net soort
van die neem van al die JavaScript dit is hier
en die uitvoering van dit op die vlieg.
Dit maak in hierdie sjabloon hierdie nuwe gevalle
van die CS klas wat die eienskappe, so ons het gegaan
deur en gedoen addLecture en addStudent aan elke.
En soos ek genoem omdat ek terugkeer nie,
Ek kan eintlik ketting hierdie addLecture en addStudent oproepe
en dit sal net so goed werk.
Die ander kenmerk in JavaScript Dit is selfs meer bruikbaar
op die bediener kant waar jy regtig op enige gegewe tyd
As jou aansoek kry groter weet nie waar jy is
en dit is moeiliker om te stel hierdie individuele inspeksiepunte
dat ek in genoemde die Chrome Inspekteur is
die debugger navraag te gebruik.
So dit is net D-E-B-U-G-G-E-R.
En as jy 'n debugger navraag in jou kode
en jy het die - Daar gaan ons, twee Gs.
Wanneer jy die debugger navraag in jou kode
en jy loop 'n debugger
soos die Chrome Inspekteur hier
of die bediener kant Chrome Inspekteur, dit vertel JavaScript
uitvoering op die lyn te stop van kode en dan is dit kan jy
om deur die res van die uitvoering van kodes.
So as ek op run-kode hier, dis nou te stop
op hierdie debugger lyn en ek kan sien OK, hier is die waarde van CS50
en dit is 'n perfekte natuurlik titel, kursus ID,
dit het geen lesings, geen studente.
En dan het ek kan stap vir stap deur die hele addLecture,
Ek kan sien dit is stoot op hierdie lesings,
muis oor dit, "Hello World".
Ek kan eintlik in die konsole doen dit sodat dit stel
na die huidige voorwerp dat jy in
Hierdie lesing is "Hello World".
En hou stepping deur soveel as wat ek wil hê.
As ek wil nie om te stap
in 'n funksie oproep want Ek weet wat dit gaan
gaan in addLecture te doen, daar is hierdie knoppie hier
wat sê: "Stap oor die volgende funksie oproep, "en so ek kan gaan
tot op die punt is ek dalk wonder oor iets.
Soos byvoorbeeld 164 lewer.
So op hierdie punt, is dit gaan gelewer word.
Ek kan hierdie sjabloon sien is die saamgestel sjabloon.
Ek kan sien op hierdie punt wat ek moet twee studente het
en twee lesings.
En dan is daar die prototipe ketting wat ek het verwys na.
So het die standaard een wat kom saam met net 'n voorwerp
in JavaScript in die algemeen,
dit kom met twee string waarde van constructor.
En dan is die mense wat Ek het myself op toegevoegde
met die addLecture, addStudent en dan die eienskappe
wat eie is aan hierdie geval van die klas
soos dit was drie maande met die nuwe navraag.
So kom ons doen net een nog 'n voorbeeld van hierdie
en dan sal ons stap na 'n paar meer interessante dinge
op die bediener kant.
So laat ons gaan voort en oop hierdie laaste voorbeeld wat -
Kom ons kyk, waar is die kode?
Ek weet nie waar dit het.
OK, goed, ons mag dalk net slaan oor die kode dan eintlik -
Ag hou op, ek dink ek gemis die styl blad vir die kode.
OK, so laat ons dit 'n bietjie groter.
In hierdie voorbeeld, ek wys 'n bietjie meer oor die omgewing
die prototipe ketting,
so opstel erfenis met die JavaScript.
So in hierdie geval, ons het 'n katalogus wat gaan
te vermoedelik in stand te hou verskeie kursusse.
En so 'n katalogus het 'n addCourse metodes.
So dit kontroleer of die kursus dit is verby in 'n geval
natuurlik as drie maande met die nuwe navraag.
So as jy probeer en stuur
in iets anders, dit sal gil op jou.
Die lewer metode wat sal lewer elk van die kursusse
deur die samestelling van sy sjabloon hieronder.
En ons het die kursus wat toegang
in hierdie geval die basis klas vir individuele departement kursusse.
En in plaas van die opstel van elke
van die kursus dot prototipe dot metode
of eiendom met behulp van die brei helper in die underscore biblioteek
te sorteer van die oproep te brei Hierdie eerste prototipe met al
van hierdie eienskappe, wat nuttige, 'n bietjie makliker om te lees.
En dan hier doen wat bekend staan ​​as die opstel
die prototipe ketting.
So dit is eintlik 'n bietjie moeilik om mense by die eerste
en selfs nog steeds gedoen vir 'n rukkie, dit is soort van harde
jou kop te draai om.
Maar moenie dat dit jou afskrik.
So ek die opstel van 'n nuwe -
'n heeltemal nuwe klas beswaar hier, CS.
En in die konstruktor,
Ek sê natuurlik toepassing van hierdie argumente.
So argumente is 'n spesiale waarde wat ek dink jy kan noem dit
in JavaScript, die navraag wat al
van die alles wat geslaag het saam is argumente
daardie funksie is beskikbaar met die argumente noem,
met die argumente navraag.
So as ek vra met verloop dot pas,
dit is die huidige konteks waarmee CS word genoem.
So wanneer ek roep dit met 'n nuwe dit is 'n - dit is 'n waarde van CS.
En ek sê noem dit Natuurlik metode hier.
O jammer - noem dit Natuurlik metode hier
maar stel die waarde van hierdie ongeag die waarde te wees
van hierdie reg hier.
So die toepassing navraag laat jy soort van die staat verander
hierdie is hoe jQuery toegelaat word om te sorteer skakelaar
uit hierdie op u as jy gaan deur
en maak 'n DOM elemente in plaas van die jQuery voorwerp.
So nou gaan ek te stel 'n tydelike funksie
wat sal gryp die prototipe van die kursus.
En soort van soos dit sy prototipe
en dan stel die prototipe op die CS funksie voorwerp
na 'n nuwe geval van dat.
So basies Ek is gesê plaas -
As ek hier gedoen het CS dot prototipe gelyk aan nuwe kursus.
Dan sou dit wees roep alles
in hierdie constructor funksie,
wat ek nie wil nie noodwendig wou.
So al wat ek doen, is soort van die skep van byna
soos 'n surrogaat-funksie wat sal die kursusse prototipe het
op dit en soort naboots die prototipe -
die kursus, maar sonder om alles in die konstruktor
en stel wat aan die prototipe.
En dan is ek net toe te voeg, het die Departement
In hierdie geval is Computer Wetenskap vir die CS voorwerp.
En dan het ek 'n soort van 'n brug weergawe van om dit te doen.
Dit maak nie in IE9 werk.
So dit is waarom ek wou soort van hoe om te wys -
wat dit doen onder die enjinkap.
Maar jy kan dit stel in dieselfde manier
waar Econ gelyk funksie Natuurlik geld hierdie argumente
en dan sê Econ dot prototipe gelyk voorwerp dot CreateCourse
dot prototipe.
So dit is 'n nuwe voorwerp wat net die prototipe
vir die kursus en dan stel die departement daar.
So nou, laat ons gaan net soos 'n debugger hier en kliek op Run.
Daar gaan ons.
So CS164 ons kan sien die prototipe ketting ons het die
eienskappe wat was stel in die konstruktor.
So waardes van hierdie wat gestel is en dan op die prototipe ketting
vir die CS voorwerp het dit Departement Rekenaarwetenskap stel.
En dan op die onderliggende prototipe ketting,
Ons het toe al die metodes en eienskappe
wat uniek is aan die kursus voorwerp.
En dan het ons die basis voorwerpe.
So dat die soort van 'n vinnige voorbeeld van die prototipe ketting.
En as jy hier kan sien, is daar is twee waardes per afdeling.
So is daar departement Rekenaarwetenskap
en dan departement nie gelys wat ek sê
as die standaard waarde hier.
So het die prototipe ketting is eintlik net 'n enkel
skakel lys.
En as dit probeer om vind 'n eiendom,
dit sal begin by die boonste vlak waarde.
So, wat is die gedefinieer in die constructor funksie
en dan soort van gaan in die prototipe ketting van daar af.
So omdat dit gevind het, so -
Indien reg hier, sê ek CS50 dot Departement,
dit sal sê Rekenaarwetenskap.
Maar as ek var -
[Pouse]
Maar as ek sê geesteswetenskappe gelyk aan nuwe kursus
en dan sê ek geesteswetenskappe dot-afdeling,
Ek sal sien departement nie gelys omdat dit na die eerste keer die -
Ek kan kyk na die prototipe ketting hier eintlik.
Dus is dit die eerste keer na die kursus beswaar en sien daar is niks
op die prototipe ketting op hierdie vlak van die departement
of vir die departement waardes so dan is dit spring na die volgende vlak,
die kursus en lyk stuur daar en vind dit.
Dus is dit net soort van soos gaan af van die top-down
en dit is soort van iets wat uniek
oor JavaScript is dat jy 'n kan verander
van hierdie waardes by enige gegewe tyd.
So in die konstruktor of in 'n individuele metode op die voorwerp
as ek wil om dit te stel departement iets nuuts,
of as ek wil selfs te stel enige van hierdie funksies
wat reeds bestaan
om iets nuuts, Ek is vry om dit te doen.
So nou het ek CS50 dot addLecture, lyk soos dit.
En as ek wil om dit in te stel na CS50 addLecture gelyk net
te leeg funksie.
Toe nou kan ek sien dat dit net heeltemal verander
wat jy nie in staat ander tale te doen
waar jy 'n strenger klas-gebaseerde erfenis
en alles soort van die opstel.
JavaScript is baie, baie buigsaam met betrekking tot daardie.
OK, laat ons spring terug in die skyfies.
So as jy byvoorbeeld altyd graag 'n funksie
'n spesifieke te hê hierdie waarde stel vir dit.
Jy kan funksie dot bind noem
en stel wat die waarde hierdie moet wees.
Jy kan dink dat dit as -
"Ek probeer om te dink van 'n goeie werklike wêreld voorbeeld, maar "
As jy wil om jou kode te beskerm
teenoor iemand potensieel noem dit met 'n waarde
Dit sou nie hierdie.
Soos byvoorbeeld AJAX terugbel soos oortollige of foute.
Diegene tipies nie genoem
met 'n goeie semantiese waarde van hierdie.
En jy is soos, "OK, het ek altyd wil dit die waarde te wees
van die kursus voorwerp dat ek die werk met.
Of die oog wat ek werk in my kode
wat verteenwoordig hierdie DOM knoop, kan jy -
jy kan konteks bind aan hierdie en dan wanneer dit later genoem
deur jQuery en dit het nie 'n goeie waarde hiervan is dit sal hou
na wat jy dit begrens met.
Dan is daar funksie oproep is kan jy die konteks spesifiseer
en spesifiseer enige veranderlike aantal argumente.
En dan is daar funksie toepassing wat jy kan slaag
in die konteks en dan óf 'n skikking
of die argumente voorwerpe wat Ek het genoem as jy sien daar.
En die argumente in enige funksie wat jy noem,
jy kan net tik in die woord "argumente"
en dit sal almal die argumente.
Dit het 'n "lengte" eiendom
dit is hoe Mei argumente was eintlik geslaag om die metodes
want in JavaScript jy kan sorteer van die oproep
met wisselende getalle argumente.
Dit is nuttig om te sê As dit 'n argument,
dan volg die kode pad.
As dit het twee, kan jy 'n ander manier om te volg.
Dit laat jou toe om werklik ' dinamiese API vir jou metodes.
Jy kan dink wat saam met jQuery
soos wanneer jy dollar dot op of bind.
En dit soort van doen verskillende dinge
om te bepaal of jy die een argument of twee of drie
of dit begin met 'n funksie.
Dit is die gebruik van die argumente eiendom
en die argumente lengte in baie gevalle
hierdie magic te hê funksie gebeur nie.
Die dinge wat jy nie kan doen met argumente is gebruik dit net
by verstek as 'n skikking.
So jy kan sê argumente drie en stel dit na iets
as jy kan met behulp van die skikking opdrag.
Jy kan gebruik om die - 'n baie van die underscore metodes
vir óf versamelings of vir die werk met skikkings,
jy in argumente kan slaag en dit sal besef
dat dit 'n argumente voorwerp en sorteer
van sorg dit vir jou.
Maar as jy wil te gebruik om die argumente wat geslaag het, word
deur 'n funksie as 'n skikking,
jy kan onderstreping gebruik dot twee skikking.
Een van die aantal nutsfunksies
wat gebou word in te onderstreep.