>> Molt bé, així que avui, Vaig a estar parlant
sobre JavaScript i com és diferent d'altres llenguatges
que és possible que Utilitzem a com PHP.
Així, en l'última conferència sobre Dilluns, parlem una mica
sobre el que és semblant, el que és familiar entre JavaScript
i PHP o Python o Ruby o C o altres llenguatges
que ja està familiaritzat.
Però en realitat JavaScript té una opinió molt singular
en el model d'objectes que fa quin tipus de completament diferent
que la majoria de llenguatges que vostè va a tractar.
Així que les funcions són una espècie
de underappreciated concepte en JavaScript.
Ells són molt més poderosos que ho són en altres idiomes
perquè poden en - per una raó,
que són capaços de ser establir com a valors.
Així que aquí tenim var x és igual a la funció
i és una primera classe valor que es pot passar
voltant com un argument.
Així que vostè no ha de declarar la funció x
i només ha d'utilitzar x en aquest àmbit.
Pot passar el valor de x en qualsevol lloc al llarg de, vostè sap,
com argument en altra funció
on es pot mòdul d'exportació com David va esmentar en el node.
Així que el següent punt és
que una funció és una objecte en JavaScript.
Així que en realitat es pot establir propietats com a valors
en una funció i simplement tractar com si fos un objecte.
Així que quan es treballa amb jQuery, ja saps, aquest dòlar
i després es passa un selector en ella
i invocar com una funció.
Però llavors també han dòlar dot AJAX.
I això no tipus de sentit si vostè pensa
d'una funció només com cosa que es pot invocar
o trucada.
Però JavaScript li permet establir les propietats de les funcions
propietats estàtiques amb només x someProp dot
com vaig assenyalar aquí.
El següent punt que estem entrarà en una mica més
en profunditat és el fet que funcions poden ser tractats
com classes en JavaScript.
Així que no és el concepte d'aquest nou operador
el que crea una nova instància de la funció, juntament amb una espècie
de com el cos de la classe com que ve juntament amb ell
i anirem en ella una mica més,
que es diu el prototip.
I és el que hi ha marques JavaScript molt singular en comparació
a altres idiomes el qual es basa la classe,
JavaScript és un prototip basat.
I a continuació, només en la part inferior hi ha,
funció només pot ser anomenat clarament com el que estem acostumats.
Així que això no és res de nou.
Una altra cosa que és únic és
que les matrius són en realitat objectes.
No són com els que estan en PHP
on s'acaba de crear una nova matriu.
Això és realment una abreviatura per dir nova matriu.
I la matriu és en realitat una subclasse d'un objecte.
Així que això és una cosa diferent i vaig a anar
en una mica més d'un detalls sobre això.
I les capacitats de depuració
amb JavaScript són realment inigualable pel que jo he vist.
Aquesta és una captura de pantalla l'Inspector Chrome
que anem a s'utilitza per a la resta
d'avui a la presentació.
I per arribar a això, només anar a presentar les eines de desenvolupament
i obert Chrome Inspector o pot fer clic dret
i feu clic a Mostra elements que Crec que està a la pàgina HTML
o crec que és ordre opció J obre això.
Però entrarem en això i vostè en realitat pot establir punts d'interrupció
com s'està executant a través de el codi JavaScript i classificar
d'avaluar el que el local variables són, quin és el valor
que és això i ho fa manera més fàcil de depurar codi.
I no - això no és obligat a codi del costat del navegador
però en realitat es pot executar una instància
d'aquesta Chrome Inspector per a la seva codi del costat del servei de
que és realment fantàstic, ja que pot passar a través de línia a línia
com una sol · licitud entra en la seva servidor i veure el que està passant
i jugar amb les variables a la consola d'aquí baix.
Així que com he esmentat, JavaScript és un llenguatge basat en prototips
el que significa que hi ha un conjunt de valors per defecte, que són una espècie
d'ocult per a cada funció
en el punt objecte propietat prototype.
Així que és una espècie d'un hash de només diferents valors per defecte
que quan es invoca un funcionar amb la nova paraula clau,
qui són establerts per per defecte com a funcions
que estan disponibles en la instància.
Així que en realitat és molt eficient per al -
que és una forma eficaç de la creació d'objectes de memòria intel · ligent
perquè el codi JavaScript temps d'execució només ha de portar el compte
del prototip de l'objecte.
D'alguna manera s'apunta que
quan cretae un nou instància d'una classe.
I també es pot imitar herència com és coneguda
en llenguatges basats en classes on tens sort
així com un present que s'estén, s'estén que es pot imitar
que en JavaScript a través del que s'anomena la
cadena de prototip.
I veurem exemples sobre això.
Així que si el teu - plugins jQuery en realitat ells recomanen jQuery
autors d'usar dot dòlar fn per afegir funcionalitat
a la biblioteca jQuery.
I de fet anem a saltar a - Per tant, en aquesta pàgina,
comptem amb el dòlar - Vaig incloure jQuery.
I si ho fa en dòlars dot a la consola
que vaig esmentar portant que a través de canvi de comandament J
o simplement anar a Veure, Eines per a desenvolupadors, Developer
i anar a la pestanya Fonts.
[Inaudible Observació]
Oh, és clar. Així que quan vaig començar per escriure en una variable,
que estigui completament acte per a mi el que es troba allà.
Així que va escriure en dòlars i puc veig crec que Chrome té algunes
incorporat dòlar, dòlar i dòlar x.
Així que ara mateix només vull dòlar i em van ficar en un punt.
I llavors em mostra totes les propietats
que estan disponibles en l'objecte jQuery.
Però si ho faig en dòlars prototip punt,
Ara veig tots els mètodes que jo estic acostumat a fer servir
quan tinc el dòlar, el selector i després em cadeneta que amb,
ja saps, afegir la classe o annexar o desenfocament o qualsevol dels similars.
Aquests són tots els realment en el prototip
que sota el capó del jQuery crea una nova instància de si mateix
i quin tipus de s'amaga tot aquests detalls de vostè.
Així que el punt que jo era fent de nou per aquí
amb la funció, es en realitat amagar prototip de vostè
i acaba d'àlies que al dòlar dot fn.
Així que la majoria de la gent realment no s'adonen
que no és un prototip sota els és. campana -
que es pot aprofitar i afegir funcionalitat addicional
a cada instància jQuery si ho desitja.
De manera que l'operador "new" és realment una espècie de difícil
d'entendre al principi.
Quan es crida a una funció amb "nou",
que és una totalment diferent forma de cridar a la funció
com si vostè acaba de cridar sense embuts.
Així que el "nou" operador crea el que s'anomena una nova instància
d'un objecte o una nova instància, es pot pensar
l'objecte com una classe.
I quan això passa, el valor d'aquest que pot ser familiar
amb de jQuery, quin tipus d'ajust aquest
al que és convenient en el moment.
En general, la van posar a la node DOM actual que ets
en el que estàs passant com cadascuna, o alguna cosa per l'estil.
Ells - Aquest valor suposa a ser el valor de la instància
que ha creat amb el "nou", que inclou tot el
a la cadena de prototip i tots dels mètodes que vostè trobaria
com a propietats de prototip.
Així que depèn de com una funció és cridada,
qual cosa el valor d'aquest és.
I està molt confús si ets nou en JavaScript.
Però cada funció que es diu té un - té en aquest valor.
Així que encara que no ha creat una nova instància d'alguna cosa,
que aquest s'assumeix ser global.
O bé, pot trucar a una funció utilitzant el mètode de trucada
on el mètode d'aplicar en JavaScript.
Vostè pot la funció i especificar el que això ha de ser.
Així que vostè pot fer que sigui dinàmic, que és realment de gran abast
sinó que també li permet fer coses que poden induir a error
i confús per altres desenvolupadors
si no s'usen per al fet.
I jQuery, jo diria fa que sigui encara més confús
pel que és convenient i s'estableix
al node DOM actual.
Però la simple regla per recordar qual cosa el valor d'aquest és
quan vostè està buscant
en una trucada funcional és el que queda del punt.
Així que si tens un objecte
i és una cosa de punts alguna cosa és la funció
que vostè està trucant, llavors el primer valor és el que el valor de
d'aquest és.
Així que aquí està un exemple de codi
on estic creant un nou objecte literal
que és només l'objecte creada amb les claus
i jo estic posant nom a Bob
i després tinc un sayName mètode que aquí -
pel que l'interior d'aquest sayName si jo x punteig sayName,
el valor d'aquest és igual a X perquè l'esquerra
del punt és x. Així que si Jo ho dic x dot sayName,
diria Hola Bob.
I llavors un altre exemple
on en realitat estic assignant x punt sayName, la funció
a la variable I, que com he esmentat
en JavaScript que pot assignar funcions
a les variables sempre que ho desitgi, és molt flexible, d'aquesta manera,
però ara quan dic I, es perd el context de x.
Així que ara és global o si està en mode estricte,
Jo crec que és nul · la o indefinit.
Però - Així que I no és el que està esperant aquí si el que busques
en x i vas cridar sayName,
vostè està esperant aquest nom se suposa que és Bob.
Però si el vas aconseguir l'objecte i el va anomenar
per si mateix, això és ara global.
I això és el que jo estava esmentant quan veus dòlar dot això,
sovint no es pensa en el que en realitat està passant.
Però jQuery mena de compte de la seva propi llenguatge específic de domini
per fer front a això i no és el que vostè està acostumat
en JavaScript.
I el assenyalo perquè és molt important
per escriure ben estructurada codi orientat a objectes
en JavaScript per realment tenir un bon coneixement i comprensió
de com funciona això i com funciona el model d'objectes
i com funciona el nou operador.
En cas contrari, vostè acabarà amb espaguetis jQuery
on tot és una espècie de tot el lloc
i només s'ocupen de la DOM.
Si en realitat es pot escriure JavaScript
d'una manera més estructurada, que fa que sigui molt més fàcil
per treballar, per ordenar de separar les preocupacions
del tracte amb la actualitzar el DOM i tractar
amb la lògica real i el codi.
Així que donem una ullada a una alguns exemples de tot això.
Així que tinc alguns exemples aquí.
Així que això és només un exemple senzill d'utilitzar un objecte de JavaScript
i l'addició d'unes poques funcions a ella i després la creació d'una espècie
d'com una aplicació en miniatura.
Així que és molt simple en realitat.
L'únic que fa és en un primer moment se li sol · licita el seu nom.
Així que ho diré de Tim i després pot canviar el seu nom pel de Bob.
I això és tot això aplicació fa.
Però el que m'agradaria assenyalar fora és com ho fa.
Així que tinc aquest generador de noms objecte que té un mètode d'arrencada
que demana a l'usuari pel seu nom
amb només trucar a aquest askForName
que aquí es fa el símbol
si el nom no va ser assignat llavors demana de nou
trucant a aquest askForName.
I després, un cop s'obté el nom, es diu a aquest nom de l'actualització.
Així que aquest continuació, estableix el El nom d'usuari a l'etiqueta h1.
I si el nom no és establert, es genera un error.
[Inaudible Observació]
Oh, és clar. Per tant, estableix el El nom d'usuari a l'etiqueta h1
trucant setDisplayName que estableix el codi HTML
al contenidor de nom JS i Estic anteposant tota la meva HTML
amb selectors JS només perquè que és un bon hàbit a aconseguir
en només per fer si no fos tan confús
quan s'utilitza selectors com l'identificador de classes o
per l'estil i la lògica
en el seu JavaScript aplicacions de front-end.
Perquè si vostè té diferents grups de persones que treballen
sobre la base de codi i vostè tenir un selector d'allà
que el dissenyador decideix canviar perquè és -
no es veuen molt bé, de manera que volen per posar en una nova classe i prendre
fos el seu i vostè està confiant en ell per a fins de JavaScript,
a continuació, el codi es trenca.
És bo per a prefixar i ordenar
d'espai de noms igual que gairebé la Classes relacionades en JavaScript
o atributs amb un prefix de JS.
Així que això és bastant simple i es pot veure
en tots aquests casos estic trucant a tornar això al final.
Així que aquesta és una bona hàbit per entrar,
per donar-li una valor de retorn vàlid.
En askForName no estic perquè això té sentit
que es podrien obtenir nom de nou.
Però el que permet tu per fer a continuació,
si torna aquesta actualització nom, és tornar el valor
de setDisplayName que és tornar el valor d'aquest.
I això li permet ordenar de la cadena com vostè està acostumat
en jQuery retornant el valor d'aquest cada vegada.
Això es refereix a la objectes actuals
pel que podria anomenar a aquest punt askForName punt setDisplayName
i que mantindria la valor d'això i permetre que
tenir una cadena bé.
I després, en - pel que en aquest segon exemple.
[Pausa]
Està bé.
D'acord. Així que seguirem endavant i obrir la consola
i aniré al meu fitxa Fonts.
Anem a esclatar això en realitat.
Així que en el desenvolupador de Chrome eines que he esmentat,
existeix aquesta peça a la dreta i un -
es pot veure aquest senyal de stop encara que per defecte, que és negre.
Però en passar el ratolí sobre ella, diu: "No fer una pausa en les excepcions.
Feu clic a la pausa totes les excepcions ".
I quan fa clic de nou, es torna blau.
I ara que en qualsevol moment hi ha un error que es produeix
en el codi JavaScript que va a aturar-se al punt i li permeten
per avaluar el que està passant.
Per tant - I això és realment una eina útil concepte està a punt d'assenyalar.
I després, si fa clic a de nou, es torna porpra
i aquesta és normalment el que segueixo polz
Només es trenca el codi quan hi ha una excepció
que no ha estat capturat.
Així que un munt de vegades en jQuery per exemple, ho intenten captures
per provar si o no un navegador té algun tipus de capacitat
i continuar des d'allà.
Aquesta és només quan hi ha un error
que no ha estat atrapat en un intent de captura.
Així que anem a tractar de presentar un nom que està en blanc.
Així que puc veure que el codi està ara detingut
en el mètode UpdateName i puc ratolí sobre els noms
i veure que està buit en blanc.
No és igual a blanc.
Així que si no nomenar llançar una nova error i ara puc fer un pas enrere
a través de la funció columna i dir: "Bé,
on va sortir això ", i veure el que el valor de client és.
Per tant, té un mètode askForName,
setDisplayName inici i UpdateName.
I això és només un molt útil manera vostè pot veure que tot el
les variables que estan disponibles en aquest àmbit, així
com les variables de pany, així que qualsevol cosa que està tancada
sobre aquesta funció.
I pel que puc veure que - qual cosa el valor del client és
i el que el valor d'aquest és.
Així que això perquè som en jQuery és igual
l'element DOM actual.
Però és realment útil per depurar codi
trencar en errors com aquest.
Una altra característica de la Chrome Inspector
que en qualsevol moment es pot feu clic a les diferents línies
a la fila i que va a trencar en els llocs
on s'han establert punts d'interrupció que estan denominats.
Així que si faig clic al la línia es torna blau.
Així que permetin-me continuar l' execució aquí, OK, que es va trencar.
I ara anem a configurar el nom a Alice i cliqueu a Enviar.
Així que ara puc veure encara abans d'arribar al punt
de l'actualització de tot, és ara vaig deixar aquí mateix perquè pugui veure
que el meu aquest nom és Alice i llavors puc seguir -
permetin-me tornar a carregar la pàgina.
Molt bé, així que ara que està a partir d'inici de nou,
que s'ha aturat en aquest línia i puc veure
aquest nom es troba actualment indefinit.
askForName és quina funció És a dir, així que això és també sovint útil
si té funcions que són procedents de diferents arxius
o llocs diferents en el codi, es pot veure on està,
i després saltar a això, es ressaltar.
És tan bo tenir l'hàbit de la utilització d'eines de depuració
que no són només consolar registre de punts.
OK, així que anem a fer una mirar un segon exemple
el que fa un major ús de prototips com havia al · ludit.
Així, en aquest exemple,
estem creant una nova funció anomenada CS
i això és capitalitzat per la qual cosa l'estàndard convenció
en JavaScript és que si un se suposa funció que s'utilitzarà
com un constructor, en contraposició
a només un normals funció, capitalitzar.
Així que tinc el capital CS i això pren un CourseID variables
i courseTitle que Em vaig posar a aquest CourseID,
aquest courseTitle al constructor.
I llavors jo també vaig posar estudiants i conferències com matrius buides.
Així que la raó per la qual -
Acceptar, de manera que el prototip propietats es van definir
aquí amb - de manera que la plantilla és només un simple guió
plantilla, una plantilla de subratllat sent una manera que vostè pot -
similar a les plantilles que David havia esmentat
al servidor, pot acaba d'escriure una etiqueta de script
que no és un JavaScript guió, però un HTML de text
i el que estic fent amb jQuery és -
no guarda aquests oberta, sí, aquí anem.
Amb jQuery, s'està fent la Valor HTML d'aquesta plantilla
i després executar a través de la subratllar llibreries d'utilitats
motor de plantilles.
Així que la documentació per això aquí
sota la plantilla d'utilitat
però bàsicament es pot llegir una mica més sobre aquest tema.
Però avalua aquesta cadena i el converteix en una funció
que llavors podem passar dades en i cridar dinàmicament.
Els següents dos mètodes que tinc són addStudent i addLecture.
Aquests cal afegir-les a la arranjaments interns que m'he fixat
al constructor i llavors el mètode render.
Per tant, anem a crear el nou instància de CS diu 164
que té aquest curs número 164 i el títol.
I a continuació, CS50, que té CS50 i introducció a CS1
i després afegir alguns lectures estudiants
i després trucar CS50 render.
I si se m'acaba el codi, de manera que Jo estic fent això amb Aval.
Un mai vol utilitzar la Aval, però sóc només una espècie
de prendre totes les Javascript és aquí
i executar sobre la marxa.
Es fa en aquest la plantilla aquestes noves instàncies
de la classe de CS que té les propietats, de manera que no hem parat
a través i fer addLecture i addStudent a cadascú.
I com vaig esmentar perquè m'estic tornant això,
Puc encadenar realitat aquests addLecture i addStudent trucades
i que funcionarà igual de bé.
L'altra característica en JavaScript això és encara més útil
al costat del servidor on realment en un moment donat
si la seva aplicació es gran no sap on es troba
i és més difícil d'establir aquests punts de ruptura individuals
que vaig esmentar en Inspector Chrome és
utilitzar la paraula clau debugger.
Així que és només D-I-B-O-G-G-I-R.
I quan es posa un depurador paraula clau en el seu codi
i vostè té la - aquí anem, dues Gs.
Quan es posa el depurador paraula clau en el seu codi
i s'està executant un depurador
com ara el crom Inspector aquí
o el Chrome costat del servidor Inspector, li diu a JavaScript
per aturar l'execució en aquesta línia del codi i que li permet
al pas per la resta de l'execució dels codis.
Així que si faig clic en el codi d'execució aquí, ara està parada
en aquesta línia depurador i que pugui veure bé, aquí hi ha el valor de CS50
i és un curs té títol, per descomptat ID,
que té no hi ha conferències, cap dels estudiants.
I llavors puc passar per tot el addLecture,
Puc veure que està empenyent a aquestes conferències,
ratolí sobre això, "Hello World".
Puc realment en el consola de fer això pel que aquest s'estableix
l'objecte actual que vostè està dins
Aquesta conferència és "Hello World".
I seguir pas a pas a través de tot el que vull.
Si jo no vull fer un pas
a causa d'una crida a la funció ' Jo sé el que està passant
fer entrar en addLecture, hi ha aquest botó d'aquí
que diu "pas en la propera crida a la funció ", i perquè pugui anar
fins al punt de si jo sóc potser preguntant sobre alguna cosa.
Com per exemple 164 render.
Així que en aquest punt, és serà prestats.
Puc veure aquesta plantilla és la plantilla compilat.
Puc veure en aquest moment jo ha de tenir dos estudiants
i dues conferències.
I després hi ha el prototip cadena que em referia.
Així que el que ve per defecte juntament amb només un objecte
en JavaScript, en general,
ve amb dues cordes valor del constructor.
I a continuació, els que He afegit a mi mateix
amb la addLecture, addStudent i a continuació, les propietats
que són exclusives d'aquest instància de la classe
ja que s'ha invocat amb la paraula clau new.
Així que fem un sol exemple més en aquesta
i després anem a pas per a alguns les coses més interessants
al costat del servidor.
Així que seguirem endavant i obrir aquest últim exemple, que és -
anem a veure, ¿on és el codi?
Jo no sé d'on va sortir.
OK, bé, pot ser que acaba de saltar sobre aquest codi a continuació, en realitat -
oh espera, crec que em vaig perdre el full d'estil per al codi.
OK, així que farem això una mica més gran.
En aquest exemple, jo estic mostrant una mica més en l'ajust
la cadena de prototips,
de manera que la creació de l'herència amb el codi JavaScript.
Així que en aquest cas, tenim un catàleg que es va
per mantenir presumiblement múltiples cursos.
I així un catàleg té 1 mètodes addCourse.
Per tant comprova si el curs que es passa en una instància
per descomptat, com s'invoca amb la paraula clau new.
Així que si vostè tracta d'enviar
en alguna cosa diferent, li cridi a vostè.
El mètode render que es representar cada un dels cursos
mitjançant la compilació de la seva plantilla a continuació.
I tenim el curs que l'accés
en aquest cas la classe base per cursos de cada departament.
I en lloc de configurar cada
del punt suposat mètode dot prototip
o establiment en el s'estenen ajudant a la biblioteca subratllat
a una mena de crida d'estendre aquest prototip amb tot
d'aquestes propietats, que és útil, una mica més fàcil de llegir.
I després aquí baix fent el que es coneix com l'establiment de
en la cadena de prototip.
Així que això és en realitat una mica difícil de la gent en un primer moment
i fins i tot tot i haver fet això per un temps, és una espècie de disc
per embolicar el seu cap al voltant.
Però no deixis que això et fa por.
Així que estic establint una nova -
una classe completament nova objectar aquí, CS.
I en el constructor,
Estic dient curs aplicar aquest argument.
Així que els arguments és un especial valor que suposo que es podria anomenar
en JavaScript, la paraula clau que té tot
del tot el que és passat al llarg és arguments
que la funció està disponible amb els arguments diuen,
amb la paraula clau arguments.
Així com jo estic trucant amb el curs dot aplicar,
aquest és el context actual amb la qual CS s'està trucant.
Així que quan l'invocava amb el nou que és una - és un valor de CS.
I el que dic trucar a aquest mètode curs aquí.
Oh, ho sento - trucar a aquest mètode curs aquí
però establir el valor d'aquesta a ser el que el valor
d'això és just aquí.
Així que la paraula clau permet aplicar canviar espècie d'estat
d'aquest que és com jQuery es permet a una espècie d'interruptor
aquesta en vostè com vostè va a través d'
i fer una sèrie d'elements DOM en lloc de l'objecte jQuery.
Així que ara em posaré una funció temporal
que va a captar l' prototip del curs.
I una mena de configurar al seu prototip
i després establir el prototip sobre la funció d'objecte CS
a una nova instància d'això.
Així que, bàsicament estic dient en el seu lloc -
si jo aquí vaig CS dot prototip és igual a nou curs.
Llavors seria trucant tot
en aquesta funció constructora,
que no vull necessàriament estimat.
Així que tot el que estic fent és espècie de la creació de gairebé
com una funció substituta que tindrà el prototip cursos
en ella i en certa manera imitar el prototip -
el curs, però sense fer tot al constructor
i establir que per al prototip.
I llavors jo només sóc afegint de manera que el departament
en aquest cas és per ordinador Ciències per a l'objecte CS.
I després tinc una mena de Versió pont de fer-ho.
No funciona en IE9.
Així que per això jo volia per mostrar una mena de com -
el que això està fent sota el capó.
Però es pot establir en la mateixa manera
on la funció és igual a Econ Per descomptat aplicar aquests arguments
i després dir prototip dot Econ iguals CreateCourse objecte dot
prototip de punts.
Així que ha creat un nou objecte que és només el prototip
per al curs i després establir el departament d'allà.
Així que ara anirem establir un depurador aquí i feu clic en execució.
Això és.
Així CS164 podem veure el cadena de prototip que tenim la
propietats que eren establert en el constructor.
Així que els valors dels mateixos que s'estableixen i després en la cadena de prototip
per a l'objecte de CS tenia departament de Ciències de la Computació establert.
I després en el subjacent cadena de prototip,
llavors tenim tot el mètodes i propietats
que són exclusius de l'objecte del curs.
I després tenim els objectes de la base.
Perquè una espècie de ràpida exemple de la cadena de prototip.
I com es pot veure aquí, hi ha són dos valors per departament.
Així que no hi ha departament de la informàtica
i després departament no enumerat que vaig dir
com el valor per defecte aquí.
Així que la cadena de prototip és en realitat una forma individual
llista d'enllaços.
I ja que tracta de trobar una propietat,
va a començar en el valor de nivell superior.
Així que el que està definit en el la funció constructora
i després una espècie d'anar pel cadena de prototips a partir d'aquí.
Així que, ja que es va trobar, de manera que -
si aquí, dic CS50 Departament punt,
que dirà Informàtica.
Però si dic var -
[Pausa]
Però si dic humanitats és igual a nou curs
i llavors jo dic humanitats punt departament,
Vaig a veure el departament que no figuren perquè va ser a la primera -
Puc mirar el prototip cadena aquí en realitat.
Així que es va anar primer al curs objecte i va veure que no hi ha res
en la cadena de prototip a aquest nivell per al departament
o per als valors de departament així després salta al següent nivell,
el curs i es veu remetre allà i el troba.
Per tant, només una mena de descendeix de dalt a baix
i que és una espècie de cosa que és únic
sobre que JavaScript està que vostè pot canviar qualsevol
d'aquests valors en qualsevol moment donat.
Així que en el constructor o en una mètode individual sobre l'objecte
si vull establir aquest departament per alguna cosa nova,
o si em vull ni establir qualsevol d'aquestes funcions
que ja són existir
a alguna cosa nova, Jo sóc lliure de fer això.
Així que ara tinc CS50 dot addLecture, s'assembla a això.
I si vull posar-lo a CS50 addLecture exactament igual
a la funció en blanc.
Llavors ara puc veure que és només va canviar per complet
que no és capaç fer altres idiomes
on es té una estricta classe basada herència
i tot és espècie de configurar.
Javascript és molt, molt flexibles pel que fa a això.
OK, anem a saltar de nou en les diapositives.
Així que si per exemple, vostè que sempre m'agrada una funció
tenir un especial aquest valor establert per a això.
Vostè pot trucar a la funció de punt d'enllaç
i establir quin és el valor d'això hauria de ser.
Vostè pot pensar en ell com -
"Estic tractant de pensar en una bon exemple del món real, però ",
si vostè vol protegir el seu codi
contra algú potencialment cridant amb un valor
això no seria això.
Com per exemple AJAX callback com excés o error.
Aquells normalment no es diuen
amb una bona semàntica valor d'aquest.
I tu estàs com: "Bé, jo sempre vull que això sigui el valor
l'objecte de golf que estic treballant.
O del punt de vista que estic treballar amb en el meu codi
que representa aquesta Node DOM, es pot establir -
pot enllaçar a aquest context i després, quan es diu més tard
per jQuery i no té un bon valor d'aquesta s'enganxarà
al que el vorejava amb.
Després està cridada a la funció es pot especificar el context
i especificar qualsevol variable nombre d'arguments.
I després hi ha la funció aplicar el que pot passar
en el context i llavors o bé una matriu
o els arguments que els objectes He esmentat com veus allà.
I els arguments en qualsevol funció que es diu,
que pot simplement escriure en la paraula "arguments"
i que tindrà tota els arguments.
Té una propietat "de llarg"
que és com arguments maig van ser en realitat va passar a que els mètodes de
ja que en JavaScript es pot ordenar de trucada
amb un nombre variable d'arguments.
És útil per dir si això tenia un argument,
seguiu aquesta ruta de codi.
Si tingués dos, vostè pot ser vol seguir un altre camí.
Això li permet tenir realment API dinàmics per als seus mètodes.
Vostè pot pensar en que amb jQuery
com quan tens dòlar dot o bind.
I quin tipus de fa diferents coses
si poses un argument o dues o tres
o començar amb una funció.
S'està utilitzant els arguments propietat
i els arguments longitud en una gran quantitat de casos
tenir aquesta màgia funcionalitat succeeixi.
Les coses que no pots fer amb arguments s'utilitzen només
per defecte com una matriu.
Així que es pot dir arguments 3 i configurar-lo perquè alguna cosa
com es pot utilitzar l'assignació de matriu.
Podeu utilitzar el - un munt dels mètodes de subratllat
ja sigui per col · leccions o per treballar amb matrius,
pot passar en arguments i es donarà compte
que es tracta d'un argument objecte i el tipus
de fer-se càrrec d'això per tu.
Però si vol utilitzar el arguments que es passen
a través d'una funció com una matriu,
pot utilitzar subratllat dot 2 array.
Un dels nombre de funcions d'utilitat
que s'estructura en subratllar.