>> Va bene, così oggi, Ho intenzione di parlare
su JavaScript e come è diverso da altre lingue
che si può essere utilizzato per come PHP.
Così nell'ultima conferenza su Lunedi, abbiamo parlato un po '
su ciò che è simile, ciò che è familiare tra JavaScript
e PHP o Python o Ruby o C o altri linguaggi
che si è già familiarità con.
Ma JavaScript realtà ha un introito davvero unico
il modello a oggetti che rende è una sorta di completamente diverso
maggior parte dei linguaggi che si sta andando ad affrontare.
Così funzioni sono una sorta
di underappreciated concetto in JavaScript.
Essi sono il modo più potente sono in altre lingue
perché possono in - per una ragione,
sono in grado di essere impostare come valori.
Quindi qui abbiamo var x è uguale funzione
ed è una prima classe valore che può essere passato
intorno come argomento.
Quindi non c'è bisogno di dichiarare funzione x
e basta usare x in tale ambito.
È possibile passare il valore di x ovunque in tutto, si sa,
come argomento in un'altra funzione
dove è possibile modulo di esportazione David come menzionato nel nodo.
Quindi il punto successivo è
che una funzione è un oggetto in JavaScript.
Così si può effettivamente impostare proprietà come valori
su una funzione e solo trattare come se fosse un oggetto.
Così, quando si lavora con jQuery, si sa, quel dollaro
e poi si passa un selettore in esso
e invocare come una funzione.
Ma allora anche voi ha dollaro dot AJAX.
E che non sorta di senso se si pensa
di una funzione così come essere qualcosa che si può invocare
o chiamare.
Ma JavaScript consente di impostare le proprietà sulle funzioni
proprietà statiche con solo x someProp dot
come ho già là fuori.
Il prossimo punto che siamo per andare in un po 'di più
in profondità è il fatto che funzioni possono essere trattati
come classi in JavaScript.
Quindi non vi è il concetto di questo nuovo operatore
che crea una nuova istanza la funzione con una sorta
di come il corpo della classe-like che viene con esso
e stiamo per andare in un po 'di più,
si chiama il prototipo.
Ed è ciò che lo rende JavaScript molto particolare rispetto
in altre lingue che si basano classe,
JavaScript è un prototipo basato.
E poi basta a fondo c'è,
funzione può solo essere chiamata chiaramente come siamo abituati.
Ecco, questo è niente di nuovo.
Un'altra cosa che è unico è
che le matrici sono in realtà oggetti.
Non sono come sono in PHP
dove basta creare un nuovo array.
Questo è in realtà una scorciatoia per dire nuovo array.
E la matrice è in realtà un sottoclasse di un oggetto.
Ecco, questo è qualcosa diverso e andrò
in poco più dettagli su questo.
E le funzionalità di debug
con JavaScript sono davvero impareggiabile per quanto ho visto.
Questo è uno schermo del Chrome Inspector
che stiamo andando a da utilizzare per il resto
della presentazione oggi.
E per arrivare a questo, basta andare a depositare strumenti di sviluppo
e aperto Chrome Inspector oppure è possibile fare clic destro
e fare clic su Mostra elementi I credo che sia a pagina HTML
o penso che sia comando Opzione J apre questo.
Ma andremo in questo e si può effettivamente impostare punti di interruzione
come si sta eseguendo attraverso il codice JavaScript e ordinare
di valutare ciò che il locale sono variabili, quali il valore
di questo e lo rende modo più semplice di codice di debug.
E da non fare - questo non è vincolata al codice del browser-side
ma si può effettivamente eseguire un'istanza
di questo Chrome Inspector per il codice lato servizio
che è davvero bello perché si può scorrere riga per riga
come una richiesta viene in server e vedere cosa succede
e giocare con le variabili nella console qui.
Quindi, come ho già detto, JavaScript è un linguaggio basato sui prototipi
il che significa che vi è un insieme dei valori di default che sono liste
di nascosto per ogni funzione
nel dot oggetto proprietà prototype.
Quindi è una sorta di hash di solo diversi valori di default
che quando si richiama un funzionare con la nuova parola chiave,
quelli è fissato dal di default come funzioni
che sono disponibili sull'istanza.
Così che in realtà è realmente efficace per la -
si tratta di un modo efficiente di memoria di creazione di oggetti saggio
perché il JavaScript runtime deve solo tenere traccia
del prototipo dell'oggetto.
E 'una sorta di punta che
quando si cretae un nuovo istanza di una classe.
E si può anche simulare eredità come è noto
nei linguaggi basati su classi dove avete ordinamento
di come un tale che si estende, Estende che si può imitare
che in JavaScript attraverso quello che viene chiamato il
catena di prototipi.
E vedremo esempi a tale proposito.
Quindi se il vostro - plugin jQuery in realtà essi raccomandano jQuery
autori di utilizzare dot dollaro fn per aggiungere funzionalità
per la libreria jQuery.
E stiamo effettivamente andando a saltare - Allora, su questa pagina,
abbiamo il dollaro - Ho incluso jQuery.
E se fate del dollaro dot nella console
di cui ho parlato portare si attraverso turno comando J
o semplicemente andare su Visualizza, Strumenti Developer, Developer
e andare alla scheda Fonti.
[Inaudible Osservazione]
Oh, certo. Così, quando ho iniziato per digitare in una variabile,
è auto-compilato per me ciò che è disponibile qui.
Così ho digitato in dollari e posso vedo penso che Chrome ha qualche
built-in del dollaro, dollaro e dollaro x.
Così adesso voglio solo dollaro e ho messo in un punto.
E poi mi si vede tutte le proprietà
che sono disponibili sull'oggetto jQuery.
Ma se faccio dollaro dot prototipo,
Ora vedo tutti i metodi che mi sono abituato ad usare
quando ho il dollaro, selettore e poi mi incateno questa con,
sai, aggiungere una classe o aggiungere o sfocatura o di simile.
Queste sono tutte realtà sul prototipo
che sotto il cofano il jQuery crea una nuova istanza di se stesso
ed è una sorta di nasconde tutto quei dettagli da voi.
Quindi il punto che ero rendendo di nuovo qui
con la funzione, essi in realtà nascondere prototipo da voi
e proprio alias che al dollaro dot fn.
Così la maggior parte delle persone effettivamente non si rendono conto
che vi è un prototipo sotto il cofano that -
che si può attingere e aggiungere ulteriori funzionalità
a ogni istanza jQuery se si desidera.
Così l'operatore "new" è davvero una sorta di difficile
da capire a prima.
Quando si chiama una funzione con il "nuovo",
si tratta di un tipo completamente diverso modo di chiamare la funzione
come se hai appena chiamato esso chiaramente.
Così l'operatore "new" crea quello che viene chiamato una nuova istanza
di un oggetto o di una nuova istanza, si può pensare
l'oggetto come classe.
E quando questo accade, il valore di questo che possono essere familiari
con da jQuery, che tipo di impostare questo
a tutto ciò che è conveniente al momento.
Di solito impostato al nodo DOM corrente che sei
come stai passando come ciascuno o qualcosa di simile.
Essi - Questo valore dovrebbe essere il valore dell'istanza
che si è creato con il "nuovo", che comprende tutto
sulla catena di prototipi e tutti dei metodi che ci si trovi
come proprietà prototipo.
Quindi dipende da come una funzione viene chiamata,
quale sia il valore di questo è.
Ed è davvero confuso se siete nuovi a JavaScript.
Ma ogni funzione che si chiama ha una - ha a questo valore.
Quindi, anche se non è stato creato una nuova istanza di qualcosa,
che viene assunto pari essere globale.
Oppure si può chiamare una funzione utilizzando il metodo di chiamata
in cui il metodo applica in JavaScript.
È possibile la funzione e specificare cosa dovrebbe essere.
Così si può rendere dinamico, che è davvero potente
ma anche ti permette di fare cose che possono trarre in inganno
e fuorviante altri sviluppatori
se non sono usano per il fatto.
E jQuery, direi rende ancora più confusa
rendendo conveniente e fissa
al nodo DOM corrente.
Ma la semplice regola da ricordare quale sia il valore di questo è
quando stai cercando
in un call funzionale è ciò che resta del punto.
Quindi, se avete un oggetto
ed è qualcosa dot qualcosa è la funzione
che si sta chiamando poi il primo valore è ciò che il valore
di questo.
Così qui è un esempio di codice
dove sto creando un nuovo oggetto letterale
che è proprio l'oggetto creata con le parentesi graffe
e sto impostando il nome di Bob
e poi ho un sayName Metodo qui che -
così all'interno di questo sayName se io x puntini sulle sayName,
il valore di questo è uguale per x perché la sinistra
del punto è x. Quindi, se Io lo chiamo x dot sayName,
direbbe Ciao Bob.
E poi un altro esempio
dove realtà sto assegnando x dot sayName, la funzione
alla variabile Y, che come ho già detto
in JavaScript voi possono assegnare funzioni
alle variabili ogni volta che si desidera, è veramente flessibile in questo modo,
ma ora quando chiamo Y, è perso il contesto di x.
Quindi questo è ormai globale o se siete in modalità rigorosa,
Credo che sia nullo o undefined.
Ma - così Y non è quello che sei aspetta qui se stai cercando
a x e si sta andando chiamare sayName,
sei in attesa di questo nome si suppone che sia Bob.
Ma se hai tirato fuori l'oggetto e lo ha chiamato
di per sé, è ora globale.
Ed è quello che accennavo quando si vede dollaro dot questo,
spesso non si pensa di cosa sta realmente accadendo.
Ma jQuery sorta di loro ha linguaggio specifico del dominio
per affrontare questo e non è quello che siete abituati
al JavaScript.
E faccio notare questo fuori perché è veramente importante
per la scrittura ben strutturata object oriented codice
in JavaScript di avere davvero una buona conoscenza e comprensione
di come funziona e come le opere del modello oggetto
e come funziona il nuovo operatore.
In caso contrario, ci si ritroverà con gli spaghetti jQuery
dove tutto è in ordine di tutto il luogo
e solo trattare con il DOM.
Se si può effettivamente scrivere JavaScript
in modo più strutturato, lo rende molto più facile
da lavorare, per ordinare di separare le preoccupazioni
di trattare con l' l'aggiornamento del DOM e affrontare
con la logica effettiva e codice.
Quindi diamo un'occhiata a un alcuni esempi intorno a quello.
Così ho alcuni esempi qui.
Quindi questo è solo un semplice esempio di utilizzo di un oggetto JavaScript
e l'aggiunta di alcune funzioni ad esso e quindi la creazione di liste
di come un'applicazione in miniatura.
Quindi è molto semplice in realtà.
L'unica cosa che fa è in un primo momento viene richiesto il tuo nome.
Quindi io dico Tim e poi si può cambiare il tuo nome Bob.
E questo è tutto ciò applicazione fa.
Ma quello che vorrei sottolineare fuori è come lo fa.
Così ho questo generatore di nome oggetto che ha un metodo start
che chiede all'utente per il loro nome
semplicemente chiamare questo askForName
che qui si fa il prompt
se il nome non è stato assegnato allora chiede nuovamente
chiamando questo askForName.
E poi una volta che prende il nome, si chiama questo nome dell'aggiornamento.
Quindi questo quindi imposta la il nome dell'utente nel tag h1.
E se il nome non è set, si genera un errore.
[Inaudible Osservazione]
Oh, certo. Quindi imposta l' il nome dell'utente nel tag h1
chiamando SetDisplayName che stabilisce il codice HTML
nel contenitore nome JS e Sto anteponendo tutto il mio HTML
con selettori JS solo perché è una buona abitudine per ottenere
in solo per fare non così confuso
quando si utilizza selettori come ID della o delle classi
sia per lo stile e per la logica
in JavaScript applicazioni di front-end.
Perché se si dispone di diversi gruppi di persone che lavorano
sulla base di codice e un selettore di là
che il progettista decide cambiare perché E'-
non sembrano grandi, così vogliono mettere in una nuova classe e prendere
fuori il vostro e vi affidate su di esso per scopi JavaScript,
allora il tuo codice rompe.
E 'bene premettere e ordinare
di namespace come quasi la Classi JavaScript connessi
o attributi con un prefisso di JS.
Quindi questo è abbastanza semplice e si può vedere
in tutti questi casi io sono chiamando restituire questo alla fine.
Quindi questo è un buon abitudine per entrare,
per darvi un valore di ritorno valido.
In askForName io non sono perché questo ha un senso
che si otterrebbe nome indietro.
Ma cosa che permette di fare poi
se si torna questo aggiornamento nome, è restituendo il valore
di SetDisplayName che è restituendo il valore di questa.
E che consente di ordinare di catena come siete abituati
al jQuery restituendo il valore di questo ogni volta.
Questo si riferisce alla oggetti correnti
così si potrebbe chiamare questo punto askForName dot SetDisplayName
e sarebbe mantenere l' valore di questo e ti permettono di
per avere una bella catena di lì.
E poi in - così in questo secondo esempio.
[Pausa]
Bene.
OK. Quindi cerchiamo di andare avanti e di aprire la console
e andrò da mio scheda Fonti.
Ti pop questo fuori in realtà.
Così nello sviluppatore Chrome gli strumenti che ho citato,
c'è questo pezzo a destra e un -
è possibile vedere questo segnale di stop anche se per impostazione predefinita, è nero.
Ma quando il mouse su di esso, dice: "Non la pausa eccezioni.
Fare clic sulla pausa tutte le eccezioni. "
E quando si fa clic ancora una volta, diventa blu.
E adesso ogni volta che c'è un errore gettato
nel codice JavaScript, sarà fermarsi al punto e consentono
per valutare cosa sta succedendo.
Quindi - E questo è davvero un utile concetto sta per sottolineare.
E poi se si fa clic ancora una volta, diventa viola
e questo è normalmente quello che mi tengo dentro
Si rompe solo il codice quando vi è un'eccezione
che non è stato catturato.
Così un sacco di volte in jQuery per esempio, ci provano catture
per verificare se un browser ha una sorta di capacità di
e continuare da lì.
Questo è solo quando c'è un errore
che non è stata catturati in un tentativo di cattura.
Quindi cerchiamo di presentare un nome che è vuoto.
Così posso vedere che il codice è ora fermo
al metodo UpdateName e posso mouse sopra i nomi
e vedere che è vuoto a vuoto.
Ci è pari a vuoto.
Quindi, se non il nome gettare un nuovo ERROR e ora posso fare un passo indietro
attraverso la funzione colonna e dire: "OK,
dove si è arrivati ​​da ", e vedere che il valore di client è.
Così ha metodo askForName,
SetDisplayName inizio e UpdateName.
E questo è solo un davvero utile modo si può vedere ha tutte le
variabili disponibili in tale ambito, nonché
come variabili di chiusura, quindi tutto ciò che è chiuso
over da questa funzione.
E così posso vedere che - quale sia il valore di client è
e quale valore di questo è.
Quindi questo perche 'siamo in jQuery è uguale
all'elemento DOM corrente.
Ma è davvero utile per il debug del codice
per rompere in caso di errori come questo.
Un'altra caratteristica del Chrome Inspector è
che in qualsiasi momento è possibile clicca sulle diverse linee
nella fila e sarà rompere nei luoghi
dove avete impostare punti di interruzione stanno indicati come.
Così se clicco, l' linea diventa blu.
Quindi lasciatemi continuare l' esecuzione qui, OK, che ha rotto.
E ora impostiamo nome di Alice e colpire Invia.
Così ora posso vedere anche prima di arrivare al punto
di aggiornare tutto, è ora fermato proprio qui, così posso vedere
che il mio questo nome è Alice e poi posso continuare -
mi permetta di ricaricare la pagina.
Va bene, quindi ora che è a partire da ripartire,
si è fermato a questo linea e posso vedere
quel nome è attualmente undefined.
askForName è quale funzione è, così che è spesso utile
se si dispone di funzioni che sono provenienti da file diversi
o luoghi diversi nel codice, si può vedere dove si trova,
e poi saltare a quella, si evidenziarlo.
Così buono per prendere l'abitudine di usare strumenti di debug
che non sono solo consolare log dot.
OK, facciamo un guardare un secondo esempio
che fa uso di più prototipi come avevo accennato a.
Quindi, in questo esempio,
stiamo creando una nuova funzione chiamata CS
e questo è capitalizzato così lo standard di convenzione
in JavaScript è se un funzione deve essere utilizzata
come costruttore, al contrario
a solo una normale funzione, è capitalizzare esso.
Così ho capitale CS e questo prende un CourseID variabile
Titolo del Corso e che Ho impostato a questo CourseID,
questo Titolo del Corso nel costruttore.
E poi ho anche impostato studenti e lezioni come array vuoti.
Quindi la ragione che -
OK, così il prototipo proprietà sono state poi definite
qui con - così template è solo una semplice sottolineatura
modello, un modello di sottolineatura essendo un modo che si può -
simile ai modelli che David aveva accennato
sul server, è possibile basta scrivere un tag script
che non è un JavaScript sceneggiatura, ma un testo HTML
e quello che sto facendo con jQuery è -
non tiene questi aperto, sì, ce ne andiamo.
Con jQuery, è sempre il Valore HTML di tale modello
e poi eseguendo attraverso l' sottolineatura librerie di utilità
template engine.
Quindi la documentazione per ciò che è quaggiù
sotto la sagoma utilità
ma in fondo si può leggere un po 'di più su di esso.
Ma si valuta questa stringa e lo trasforma in una funzione
quale possiamo poi passare i dati in e chiamare dinamicamente.
I prossimi due metodi che ho sono addStudent e addLecture.
Si tratta semplicemente aggiungere alla matrici interne che ho prefissato
nel costruttore e allora il metodo di rendering.
Quindi, creiamo il nuovo istanza di CS chiama 164
che ha questo corso il numero 164 e il titolo.
E poi CS50 che ha CS50 e introduzione di CS1
e poi aggiungere qualche lezioni frontali studenti
e quindi chiamare CS50 rendering.
E se corro codice, in modo Sto facendo quello con Eval.
Non vuoi mai veramente usare il Eval, ma io sono solo liste
di prendere tutte le JavaScript che è qui
e l'esecuzione al volo.
Si rende in questo modello di queste nuove istanze
della classe CS che hanno le proprietà, quindi siamo andati
attraverso e fatto addLecture e addStudent a ciascuno.
E come ho già detto perché sto tornando questo,
Posso effettivamente concatenare questi chiamate addLecture e addStudent
e funzionerà altrettanto bene.
L'altra caratteristica in JavaScript Ciò è tanto più utile
sul lato server in cui davvero in un dato momento
se l'applicazione viene grande non so dove sei
ed è più difficile da impostare questi singoli punti di interruzione
di cui ho parlato in l'ispettore Chrome è
utilizzare la parola chiave debugger.
Quindi è solo D-E-B-U-G-G-E-R.
E quando si mette un debugger parola chiave nel codice
e si ha la - ce ne andiamo, due Gs.
Quando si inserisce il debugger parola chiave nel codice
e si sta eseguendo un debugger
come il Chrome Ispettore qui
o Chrome lato server L'ispettore, racconta JavaScript
per interrompere l'esecuzione su quella linea di codice e quindi ti permette
per scorrere il resto dell'esecuzione dei codici.
Così se clicco eseguire codice qui, è ora di arresto
in questa linea debugger e posso vedi OK, ecco il valore di CS50
ed è un corso ottenuto titolo, ID corso,
è ottenuto senza lezioni, nessuno studente.
E poi posso passare attraverso tutta addLecture,
Vedo che sta spingendo a queste lezioni,
mouse sopra che, "Ciao Mondo".
Posso effettivamente in console fare questo quindi questo è impostato
all'oggetto corrente che sei dentro
Questa conferenza è "Ciao Mondo".
E mantenere stepping attraverso quanto voglio.
Se io non voglio fare un passo
in causa una chiamata di funzione ' So quello che sta succedendo
per fare andare in addLecture, c'è questo tasto qui
che dice "Step nel prossimo chiamata di funzione ", e così posso andare
al punto che sono stati forse chiedendo qualcosa.
Come per esempio 164 rendering.
Quindi, a questo punto, è sta per essere reso.
Riesco a vedere questo modello è il modello compilato.
Riesco a vedere a questo punto mi dovrebbe avere due studenti
e due conferenze.
E poi c'è il prototipo catena che mi riferivo.
Così quello di default che viene con solo un oggetto
in JavaScript in generale,
si tratta di due stringhe valore del costruttore.
E poi quelli che Ho aggiunto su di me
con il addLecture, addStudent e quindi le proprietà
che sono unici per questo istanza della classe
come è stato invocato con la parola chiave new.
Allora, facciamo un solo altro esempio su questo
e poi ci passo ad alcuni le cose più interessanti
sul lato server.
Quindi cerchiamo di andare avanti e aprire questo ultimo esempio, che è -
vediamo, in cui è il codice?
Non so se questo è andato.
OK, bene, potremmo saltare su questo codice poi effettivamente -
oh resistere, penso che ho perso il foglio di stile per il codice.
OK, allora facciamo questo un po 'più grande.
In questo esempio, sto mostrando un po 'di più l'impostazione
la catena di prototipi,
così la creazione di eredità con il codice JavaScript.
Quindi, in questo caso, abbiamo un catalogo che sta
mantenere presumibilmente più corsi.
E così un catalogo ha un metodo addCourse.
Quindi viene verificato se il corso che è passato in un 'istanza
naturalmente, come invocato con la parola chiave new.
Quindi, se si cerca di inviare
in qualcosa di diverso, vi urlare a voi.
Il metodo di rendering che sarà rendere ciascuno dei corsi
compilando il relativo modello di seguito.
E abbiamo il corso che l'accesso
in questo caso la classe base per Corsi di singolo reparto.
E invece di impostare ogni
del punto naturalmente Metodo prototipo dot
o struttura utilizzando il estendono helper nella libreria di sottolineatura
per ordinare di chiamata estendere questo prototipo con tutte
di queste proprietà, che è utile, un po 'più facile da leggere.
E poi qui a fare ciò che è noto come l'impostazione
la catena di prototipi.
Quindi questo è in realtà un po ' difficile da persone al primo
e persino ancora di aver fatto questo per un po ', è una sorta di disco
per avvolgere la testa intorno.
Ma non lasciare che ti spaventa.
Quindi sto creazione di una nuova -
una nuova classe oggetto qui, CS.
E nel costruttore,
Sto dicendo corso Applicare questo argomento.
Quindi argomenti è una speciale valore Credo che si potrebbe chiamare
in JavaScript, il parola chiave che ha tutto
del tutto ciò che è passava è argomenti
tale funzione è disponibile con gli argomenti chiamano,
con la parola chiave argomenti.
Così come sto chiamando con il corso dot applica,
questo è il contesto corrente con la quale CS viene chiamato.
Così, quando invoco con nuovi si tratta di una - è un valore di CS.
E sto dicendo chiamare questo Metodo corso qui.
Oh scusate - chiamare questo Metodo corso proprio qui
ma impostare il valore di questa essere qualunque sia il valore
di questo è proprio qui.
Così la parola chiave applicano permette di una sorta di modificare lo stato
di questa che è come jQuery è consentito per ordinare dell'interruttore
questo su di voi come stai passando
e fare un elementi DOM anziché l'oggetto jQuery.
Così ora ho intenzione di impostare una funzione temporanea
che catturerà l' prototipo del corso.
E una sorta di impostarla al suo prototipo
e quindi impostare il prototipo nell'oggetto funzione CS
a una nuova istanza di questo.
Quindi, fondamentalmente io sono dicendo invece -
se ho qui fatto CS dot prototipo equivale nuovo corso.
Allora sarebbe chiamando tutto
in questa funzione di costruzione,
che non vorrei necessariamente voluto.
Quindi tutto quello che sto facendo è sorta di creazione di quasi
come una funzione di surrogato che avrà il prototipo corsi
su di esso e liste di imitare il prototipo -
il corso ma senza fare tutto nel costruttore
e impostare che al prototipo.
E poi io sono solo aggiungendo così il reparto
in questo caso è Computer La scienza per l'oggetto CS.
E poi ho una sorta di versione ponte di farlo.
Non funziona in IE9.
Ecco perché ho voluto per mostrare una sorta di come -
cosa sta facendo sotto il cofano.
Ma è possibile impostare nello stesso modo
dove Econ uguale funzione Naturalmente applicare questi argomenti
e poi dire Econ dot prototipo pari oggetto dot CreateCourse
dot prototipo.
Quindi è crea un nuovo oggetto che è proprio il prototipo
per il corso e poi impostare il reparto lì.
Così ora facciamo solo andare impostare un debugger qui e fare clic su Esegui.
Ci andiamo.
Così CS164 possiamo vedere il catena di prototipi abbiamo il
proprietà che erano impostato nel costruttore.
Così valori di questi che sono stati impostati e poi sulla catena di prototipi
per l'oggetto CS aveva dipartimento di Computer Science set.
E poi sul sottostante catena di prototipi,
abbiamo poi tutto il metodi e proprietà
che sono unici per l'oggetto del corso.
E poi abbiamo gli oggetti di base.
In modo che una sorta di rapida esempio di catena di prototipi.
E come potete vedere qui, là sono due valori per ogni reparto.
Quindi non vi è servizio di informatica
e poi reparto Non elencato che ho detto
come valore di default qui.
Così la catena di prototipi è in realtà solo un singolarmente
elenco di link.
E come si cerca di trovare una proprietà,
si inizierà alla valore di livello superiore.
Allora qual è il definito in la funzione di costruzione
e poi una sorta di andare in fondo alla prototipo catena da lì.
Quindi perché ha trovato, così -
se proprio qui, dico CS50 dot Dipartimento,
si dirà Computer Science.
Ma se dico var -
[Pausa]
Ma se dico umanistiche uguale nuovo corso
e allora io dico umanistiche dot reparto,
Vedrò dipartimento non quotate perché è andato alla prima del -
Posso guardare il prototipo catena qui in realtà.
Così è andato prima al corso oggetto e ho visto non c'è niente
sulla catena prototipo questo livello per il reparto
o per valori grandi così poi si passa al livello successivo,
il corso e sguardi inoltrare lì e lo trova.
Quindi è proprio una specie di scende dall'alto verso il basso
e questo è una sorta di qualcosa di unico
su JavaScript è che si può cambiare qualsiasi
di questi valori a un dato momento.
Così nel costruttore o in un metodo individuale sull'oggetto
se voglio impostare questo reparto a qualcosa di nuovo,
o se ho neanche voglia di impostare qualsiasi di queste funzioni
che sono già esistere
a qualcosa di nuovo, Io sono libero di farlo.
Così adesso ho CS50 dot addLecture, sembra così.
E se voglio impostarlo CS50 addLecture uguale solo
alla funzione vuoto.
Allora adesso posso vedere che è appena completamente cambiato
che non sei in grado per fare un altro lingue
dove si ha una rigorosa classe basata ereditarietà
e tutto è sorta di set up.
JavaScript è molto, molto flessibile per quanto riguarda questo.
OK, facciamo un salto indietro nelle diapositive.
Quindi, se per esempio si sarebbe sempre come una funzione
avere una particolare questo valore impostato per esso.
È possibile chiamare la funzione dot bind
e impostare ciò che il valore di questo dovrebbe essere.
Si può pensare ad esso come -
"Sto cercando di pensare a un buon esempio reale del mondo, ma ",
se si vuole proteggere il codice
contro qualcuno potenzialmente chiamando con un valore
che non sarebbe questa.
Come per esempio AJAX callback come eccesso o di errore.
Coloro che non sono in genere chiamati
con una buona semantica valore di questa.
E tu sei come, "OK, ho sempre vuole che questo sia il valore
dell'oggetto naturalmente che sto lavorando.
O la vista che sto lavorare con nel mio codice
che rappresenta questo Nodo DOM, è possibile impostare -
è possibile associare contesto di questo e poi quando si chiama più tardi
da jQuery e non ha un buon valore di questa che sarà bastone
a quello che si delimitate con.
Poi c'è la chiamata di funzione sono stati è possibile specificare il contesto
e specificare qualsiasi variabile numero di argomenti.
E poi c'è la funzione applicato che è possibile passare
nel contesto e allora o un array
o gli argomenti oggetti che Ho detto come si vede lì.
E gli argomenti in ogni funzione che si chiama,
si può semplicemente digitare la parola "argomenti"
e si avrà tutto gli argomenti.
Ha una proprietà "lunghezza"
che è come argomenti maggio sono stati effettivamente passato a che i metodi
poiché in JavaScript è possibile ordinare di chiamata
con numeri variabili di argomenti.
E 'utile per dire Se questo fosse un argomento,
quindi seguire questo percorso di codice.
Se avesse due, si potrebbe vogliono seguire un altro modo.
Esso consente di avere realmente API dinamiche per i vostri metodi.
Si può pensare di che con jQuery
come quando hai dollaro dot o bind.
Ed è una sorta di fa cose diverse
come se si mette un argomento o due o tre
o iniziare con una funzione.
Si sta usando gli argomenti proprietà
e gli argomenti lunghezza in molti casi
per avere questa magia funzionalità accadere.
Le cose non si possono fare con argomenti si usano solo
per impostazione predefinita come una matrice.
Così si può dire che gli argomenti tre e impostarlo su qualcosa
come si potrebbe usare l'assegnazione array.
È possibile utilizzare la - molto dei metodi di sottolineatura
sia per collezioni o per lavorare con gli array,
è possibile passare argomenti e renderà conto
che si tratta di un argomento oggetto e ordinamento
di prendersi cura di questo per voi.
Ma se si desidera utilizzare il argomenti che vengono passati
attraverso una funzione come una matrice,
è possibile utilizzare underscore dot due array.
Uno del numero di funzioni di utilità
che sono costruire per sottolineare.