>> Muy bien, así que hoy, Voy a estar hablando
acerca de JavaScript y cómo es diferente de otros lenguajes
que es posible que Utilizamos a como PHP.
Así, en la última conferencia sobre Lunes, hablamos un poco
sobre lo que es parecido, lo que es familiar entre JavaScript
y PHP o Python o Ruby o C u otros lenguajes
que ya está familiarizado.
Pero en realidad JavaScript tiene una opinión muy singular
en el modelo de objetos que hace que tipo de completamente diferente
que la mayoría de lenguajes que usted va a tratar.
Así que las funciones son una especie
de underappreciated concepto en JavaScript.
Ellos son mucho más poderosos que lo son en otros idiomas
porque pueden en - por una razón,
que son capaces de ser establecer como valores.
Así que aquí tenemos var x es igual a la función
y es una primera clase valor que se puede pasar
alrededor como un argumento.
Así que usted no tiene que declarar la función x
y sólo tiene que utilizar x en ese ámbito.
Puede pasar el valor de x en cualquier lugar a lo largo de, usted sabe,
como argumento en otra función
donde se puede módulo de exportación como David mencionó en el nodo.
Así que el siguiente punto es
que una función es una objeto en JavaScript.
Así que en realidad se puede establecer propiedades como valores
en una función y simplemente tratar como si fuera un objeto.
Así que cuando se trabaja con jQuery, ya sabes, ese dólar
y luego se pasa un selector en ella
e invocarlo como una función.
Pero entonces también han dólar dot AJAX.
Y eso no tipo de sentido si usted piensa
de una función sólo como algo que se puede invocar
o llamada.
Pero JavaScript le permite establecer las propiedades de las funciones
propiedades estáticas con sólo x someProp dot
como señalé ahí.
El siguiente punto que estamos va a entrar en un poco más
en profundidad es el hecho de que funciones pueden ser tratados
como clases en JavaScript.
Así que no es el concepto de este nuevo operador
lo que crea una nueva instancia de la función, junto con una especie
de como el cuerpo de la clase como que viene junto con él
y vamos a ir en ella un poco más,
que se llama el prototipo.
Y es lo que hay marcas JavaScript muy singular en comparación
a otros idiomas el cual se basa la clase,
JavaScript es un prototipo basado.
Y a continuación, sólo en la parte inferior hay,
función sólo puede ser llamado claramente como lo que estamos acostumbrados.
Así que eso no es nada nuevo.
Otra cosa que es único es
que las matrices son en realidad objetos.
No son como los que están en PHP
donde se acaba de crear una nueva matriz.
Esto es realmente una abreviatura por decir nueva matriz.
Y la matriz es en realidad una subclase de un objeto.
Así que eso es algo diferente y voy a ir
en un poco más de un detalles sobre eso.
Y las capacidades de depuración
con JavaScript son realmente inigualable por lo que yo he visto.
Esta es una captura de pantalla del Inspector Chrome
que vamos a se utiliza para el resto
de hoy a la presentación.
Y para llegar a esto, sólo ir a presentar las herramientas para desarrolladores
y abierto Chrome Inspector o puede hacer clic derecho
y haga clic en Mostrar elementos que Creo que está en la página HTML
o creo que es comando opción J abre esto.
Pero vamos a entrar en esto y usted en realidad puede establecer puntos de interrupción
como se está ejecutando a través de el código JavaScript y clasificar
de evaluar lo que lo local variables son, cuál es el valor
de que es esto y lo hace manera más fácil de depurar código.
Y no - esto no es obligado a código del lado del navegador
pero en realidad se puede ejecutar una instancia
de esta Chrome Inspector para su código del lado del servicio de
que es realmente fantástico, ya que puede pasar a través de línea a línea
como una solicitud entra en su servidor y ver lo que está pasando
y jugar con las variables en la consola de aquí abajo.
Así que como he mencionado, JavaScript es un lenguaje basado en prototipos
lo que significa que hay un conjunto de valores por defecto, que son una especie
de oculto para cada función
en el punto objeto propiedad prototype.
Así que es una especie de un hash de sólo diferentes valores por defecto
que cuando se invoca un funcionar con la nueva palabra clave,
quienes son establecidos por por defecto como funciones
que están disponibles en la instancia.
Así que en realidad es muy eficiente para el -
que es una forma eficaz de la creación de objetos de memoria inteligente
porque el código JavaScript tiempo de ejecución sólo tiene que llevar la cuenta
del prototipo del objeto.
De alguna manera se apunta a que
cuando cretae un nuevo instancia de una clase.
Y también se puede imitar herencia como es conocida
en lenguajes basados ​​en clases donde tienes suerte
así como un presente que se extiende, se extiende que se puede imitar
que en JavaScript a través de lo que se llama la
cadena de prototipo.
Y vamos a ver ejemplos sobre eso.
Así que si tu - plugins jQuery en realidad ellos recomiendan jQuery
autores de usar dot dólar fn para agregar funcionalidad
a la biblioteca jQuery.
Y de hecho vamos a saltar a - Por lo tanto, en esta página,
contamos con el dólar - Incluí jQuery.
Y si lo hace en dólares dot en la consola
que mencioné trayendo que a través de cambio de comando J
o simplemente ir a Ver, Herramientas para desarrolladores, Developer
e ir a la pestaña Fuentes.
[Inaudible Observación]
Oh, por supuesto. Así que cuando empecé para escribir en una variable,
que esté completa-auto para mí lo que se encuentra allí.
Así que escribió en dólares y puedo veo creo que Chrome tiene algunas
incorporado dólar, dólar y dólar x.
Así que ahora mismo sólo quiero dólar y me metieron en un punto.
Y entonces me muestra todas las propiedades
que están disponibles en el objeto jQuery.
Pero si lo hago en dólares prototipo punto,
Ahora veo todos los métodos que yo estoy acostumbrado a usar
cuando tengo el dólar, el selector y luego me cadeneta que con,
ya sabes, agregar la clase o anexar o desenfoque o cualquiera de los similares.
Esos son todos los realmente en el prototipo
que bajo el capó del jQuery crea una nueva instancia de sí mismo
y que tipo de se esconde todo esos detalles de usted.
Así que el punto de que yo era haciendo de nuevo por aquí
con la función, se en realidad ocultar prototipo de usted
y acaba de alias que al dólar dot fn.
Así que la mayoría de la gente realmente no se dan cuenta
que no es un prototipo bajo los Es. campana -
que se puede aprovechar y añadir funcionalidad adicional
a cada instancia jQuery si lo desea.
De modo que el operador "new" es realmente una especie de difícil
de entender al principio.
Cuando se llama a una función con "nuevo",
que es una totalmente diferente forma de llamar a la función
como si usted acaba de llamar sin rodeos.
Así que el "nuevo" operador crea lo que se llama una nueva instancia
de un objeto o una nueva instancia, se puede pensar
del objeto como una clase.
Y cuando esto sucede, el valor de este que puede ser familiar
con de jQuery, que tipo de ajuste este
a lo que es conveniente en el momento.
Por lo general, la pusieron a la nodo DOM actual que eres
en lo que estás pasando como cada una, o algo por el estilo.
Ellos - Este valor se supone a ser el valor de la instancia
que ha creado con el "nuevo", que incluye todo lo
en la cadena de prototipo y todos de los métodos que usted encontraría
como propiedades de prototipo.
Así que depende de cómo una función es llamada,
lo que el valor de este es.
Y está muy confuso si eres nuevo en JavaScript.
Pero cada función que se llama tiene un - tiene en este valor.
Así que incluso si usted no ha creado una nueva instancia de algo,
que este se asume ser global.
O bien, puede llamar a una función utilizando el método de llamada
donde el método de aplicar en JavaScript.
Usted puede la función y especificar lo que esto debe ser.
Así que usted puede hacer que sea dinámico, que es realmente de gran alcance
sino que también le permite hacer cosas que pueden inducir a error
y confuso para otros desarrolladores
si no se usan para el hecho.
Y jQuery, yo diría hace que sea aún más confuso
por lo que es conveniente y se establece
al nodo DOM actual.
Pero la simple regla para recordar lo que el valor de este es
cuando usted está buscando
en una llamada funcional es lo que queda del punto.
Así que si tienes un objeto
y es algo de puntos algo es la función
que usted está llamando, entonces el primer valor es lo que el valor de
de este es.
Así que aquí está un ejemplo de código
donde estoy creando un nuevo objeto literal
que es sólo el objeto creada con las llaves
y yo estoy poniendo nombre a Bob
y luego tengo un sayName método que aquí -
por lo que el interior de este sayName si yo x punteo sayName,
el valor de este es igual a X porque la izquierda
del punto es x. Así que si Yo lo llamo x dot sayName,
diría Hola Bob.
Y entonces otro ejemplo
donde en realidad estoy asignando x punto sayName, la función
a la variable Y, que como he mencionado
en JavaScript que puede asignar funciones
a las variables siempre que lo desee, es muy flexible, de esa manera,
pero ahora cuando llamo Y, se pierde el contexto de x.
Así que ahora es global o si está en modo estricto,
Yo creo que es nula o indefinido.
Pero - Así que Y no es lo que está esperando aquí si lo que buscas
en x y vas llamar sayName,
usted está esperando este nombre se supone que es Bob.
Pero si lo lograste el objeto y lo llamó
por sí mismo, esto es ahora global.
Y eso es lo que yo estaba mencionando cuando ves dólar dot esto,
a menudo no se piensa en lo que en realidad está pasando.
Pero jQuery especie de cuenta de su propio lenguaje específico de dominio
para hacer frente a esto y no es lo que usted está acostumbrado
en JavaScript.
Y lo señalo porque es muy importante
para escribir bien estructurada código orientado a objetos
en JavaScript para realmente tener un buen conocimiento y comprensión
de cómo funciona esto y cómo funciona el modelo de objetos
y cómo funciona el nuevo operador.
De lo contrario, usted terminará con espaguetis jQuery
donde todo es una especie de todo el lugar
y sólo se ocupan de la DOM.
Si en realidad se puede escribir JavaScript
de una manera más estructurada, que hace que sea mucho más fácil
para trabajar, para ordenar de separar las preocupaciones
del trato con la actualizar el DOM y tratar
con la lógica real y el código.
Así que echemos un vistazo a una algunos ejemplos de todo eso.
Así que tengo algunos ejemplos aquí.
Así que esto es sólo un ejemplo sencillo de utilizar un objeto de JavaScript
y la adición de unas pocas funciones a ella y luego la creación de una especie
de como una aplicación en miniatura.
Así que es muy simple en realidad.
Lo único que hace es en un primer momento se le solicita su nombre.
Así que lo diré de Tim y luego puede cambiar su nombre por el de Bob.
Y eso es todo esto aplicación hace.
Pero lo que me gustaría señalar fuera es cómo lo hace.
Así que tengo este generador de nombres objeto que tiene un método de arranque
que pide al usuario por su nombre
con sólo llamar a este askForName
que aquí se hace el símbolo
si el nombre no fue asignado entonces pide de nuevo
llamando a este askForName.
Y luego, una vez que se obtiene el nombre, se llama a este nombre de la actualización.
Así que este continuación, establece el El nombre de usuario en la etiqueta h1.
Y si el nombre no es establecido, se genera un error.
[Inaudible Observación]
Oh, por supuesto. Por lo tanto, establece el El nombre de usuario en la etiqueta h1
llamando setDisplayName que establece el código HTML
en el contenedor de nombre JS y Estoy anteponiendo toda mi HTML
con selectores JS sólo porque que es un buen hábito a conseguir
en sólo para hacer si no fuera tan confuso
cuando se utiliza selectores como el identificador de clases o
para el estilo y la lógica
en su JavaScript aplicaciones de front-end.
Porque si usted tiene diferentes grupos de personas que trabajan
sobre la base de código y usted tener un selector de allí
que el diseñador decide cambiar porque es -
no se ven muy bien, por lo que quieren para poner en una nueva clase y tomar
fuera el suyo y usted está confiando en él para fines de JavaScript,
a continuación, el código se rompe.
Es bueno para prefijar y ordenar
de espacio de nombres al igual que casi la Clases relacionadas en JavaScript
o atributos con un prefijo de JS.
Así que esto es bastante simple y se puede ver
en todos estos casos estoy llamando a regresar esto al final.
Así que esta es una buena hábito para entrar,
para darle una valor de retorno válido.
En askForName no estoy porque eso tiene sentido
que se podrían obtener nombre de nuevo.
Pero lo que permite usted pueda hacer a continuación,
si regresa esta actualización nombre, es devolver el valor
de setDisplayName que es devolver el valor de este.
Y eso le permite ordenar de la cadena como usted está acostumbrado
en jQuery devolviendo el valor de este cada vez.
Esto se refiere a la objetos actuales
por lo que podría llamar a este punto askForName punto setDisplayName
y que mantendría la valor de esto y permitir que
tener una cadena bien allí.
Y luego, en - por lo que en este segundo ejemplo.
[Pausa]
Está bien.
Aceptar. Así que vamos a seguir adelante y abrir la consola
e iré a mi ficha Fuentes.
Vamos a estallar esto en realidad.
Así que en el desarrollador de Chrome herramientas que he mencionado,
existe esta pieza a la derecha y un -
se puede ver esta señal de stop aunque por defecto, que es negro.
Pero al pasar el ratón sobre ella, dice: "No hacer una pausa en las excepciones.
Haga clic en la pausa todas las excepciones ".
Y cuando hace clic en él de nuevo, se vuelve azul.
Y ahora que en cualquier momento hay un error que se produce
en el código JavaScript que va a detenerse en el punto y le permiten
para evaluar lo que está pasando.
Por lo tanto - Y eso es realmente una herramienta útil concepto está a punto de señalar.
Y luego, si hace clic en de nuevo, se vuelve púrpura
y esta es normalmente lo que sigo pulg
Sólo se rompe el código cuando hay una excepción
que no ha sido capturado.
Así que un montón de veces en jQuery para ejemplo, lo intentan capturas
para probar si o no un navegador tiene algún tipo de capacidad
y continuar desde allí.
Esta es sólo cuando hay un error
que no ha sido atrapado en un intento de captura.
Así que vamos a tratar de presentar un nombre que está en blanco.
Así que puedo ver que el código está ahora detenido
en el método UpdateName y puedo ratón sobre los nombres
y ver que está vacío en blanco.
No es igual a blanco.
Así que si no nombrar lanzar una nueva error y ahora puedo dar un paso atrás
a través de la función columna y decir: "Bueno,
donde salió esto ", y ver lo que el valor de cliente es.
Por lo tanto, tiene un método askForName,
setDisplayName inicio y UpdateName.
Y esto es sólo un muy útil manera usted puede ver que todo el
las variables que están disponibles en ese ámbito, así
como las variables de cerradura, así que cualquier cosa que está cerrada
sobre esta función.
Y por lo que puedo ver que - lo que el valor del cliente es
y lo que el valor de este es.
Así que esto porque somos en jQuery es igual
al elemento DOM actual.
Pero es realmente útil para depurar código
romper en errores como este.
Otra característica de la Chrome Inspector
que en cualquier momento se puede haga clic en las diferentes líneas
en la fila y que va a romper en los lugares
donde se han establecido puntos de interrupción que están denominados.
Así que si hago clic en el la línea se vuelve azul.
Así que déjame continuar la ejecución aquí, OK, que se rompió.
Y ahora vamos a configurar el nombre a Alice y pulsa en Enviar.
Así que ahora puedo ver aún antes de llegar al punto
de la actualización de todo, es ahora dejé aquí mismo para que pueda ver
que mi este nombre es Alice y entonces puedo seguir -
permítanme volver a cargar la página.
Muy bien, así que ahora que está a partir de inicio de nuevo,
que se ha detenido en este línea y puedo ver
ese nombre se encuentra actualmente indefinido.
askForName es qué función Es decir, así que eso es también a menudo útil
si tiene funciones que son procedentes de diferentes archivos
o lugares diferentes en el código, se puede ver donde está,
y luego saltar a eso, se resaltarlo.
Es tan bueno tener el hábito de la utilización de herramientas de depuración
que no son sólo consolar registro de puntos.
OK, así que vamos a echar un mirar un segundo ejemplo
lo que hace un mayor uso de prototipos como había aludido.
Así, en este ejemplo,
estamos creando una nueva función llamada CS
y esto es capitalizado por lo que el estándar convención
en JavaScript es que si un se supone función que se utilizará
como un constructor, en contraposición
a sólo un normales función, capitalizarla.
Así que tengo el capital CS y esto toma un CourseID variables
y courseTitle que Me puse a este CourseID,
este courseTitle en el constructor.
Y entonces yo también puse estudiantes y conferencias como matrices vacías.
Así que la razón por la que -
Aceptar, por lo que el prototipo propiedades se definieron
aquí con - por lo que la plantilla es sólo un simple guión
plantilla, una plantilla de subrayado siendo una manera que usted puede -
similar a las plantillas que David había mencionado
en el servidor, puede acaba de escribir una etiqueta de script
que no es un JavaScript guión, pero un HTML de texto
y lo que estoy haciendo con jQuery es -
no guarda estos abierta, sí, ahí vamos.
Con jQuery, se está haciendo la Valor HTML de esta plantilla
y luego ejecutarlo a través de la subrayar librerías de utilidades
motor de plantillas.
Así que la documentación para eso está aquí
bajo la plantilla de utilidad
pero básicamente se puede leer un poco más al respecto.
Pero evalúa esta cadena y lo convierte en una función
que entonces podemos pasar datos en y llamar dinámicamente.
Los siguientes dos métodos que tengo son addStudent y addLecture.
Estos hay que añadirlas a la arreglos internos que me he fijado
en el constructor y entonces el método render.
Por lo tanto, vamos a crear el nuevo instancia de CS llama 164
que tiene este curso número 164 y el título.
Y a continuación, CS50, que tiene CS50 y introducción a CS1
y luego añadir algunos lectures estudiantes
y luego llamar CS50 render.
Y si se me acaba el código, por lo que Yo estoy haciendo eso con Eval.
Uno nunca quiere utilizar la Eval, pero soy sólo una especie
de tomar todas las JavaScript es aquí
y ejecutarlo sobre la marcha.
Se hace en este la plantilla estas nuevas instancias
de la clase de CS que tiene las propiedades, por lo que no hemos parado
a través y hacer addLecture y addStudent a cada uno.
Y como mencioné porque me estoy volviendo esto,
Puedo encadenar realidad estos addLecture y addStudent llamadas
y que funcionará igual de bien.
La otra característica en JavaScript esto es aún más útil
en el lado del servidor donde realmente en un momento dado
si su aplicación se grande no sabe dónde se encuentra
y es más difícil de establecer estos puntos de ruptura individuales
que mencioné en Inspector Chrome es
utilizar la palabra clave debugger.
Así que es sólo D-E-B-U-G-G-E-R.
Y cuando se pone un depurador palabra clave en su código
y usted tiene la - ahí vamos, dos Gs.
Cuando se pone el depurador palabra clave en su código
y se está ejecutando un depurador
tales como el cromo Inspector aquí
o el Chrome lado del servidor Inspector, le dice a JavaScript
para detener la ejecución en esa línea del código y que le permite
al paso por el resto de la ejecución de los códigos.
Así que si hago clic en el código de ejecución aquí, ahora está parada
en esta línea depurador y que pueda ver bien, aquí está el valor de CS50
y es un curso tiene título, por supuesto ID,
que tiene no hay conferencias, ninguno de los estudiantes.
Y entonces puedo pasar por todo el addLecture,
Puedo ver que está empujando a estas conferencias,
ratón sobre eso, "Hello World".
Puedo realmente en el consola de hacer esto por lo que este se establece
al objeto actual que usted está adentro
Esta conferencia es "Hello World".
Y seguir paso a paso a través de todo lo que quiero.
Si yo no quiero dar un paso
a causa de una llamada a la función ' Yo sé lo que está pasando
hacer entrar en addLecture, hay este botón de aquí
que dice "paso en la próxima llamada a la función ", y para que pueda ir
hasta el punto de si yo soy tal vez preguntando acerca de algo.
Como por ejemplo 164 render.
Así que en este punto, es va a ser prestados.
Puedo ver esta plantilla es la plantilla compilado.
Puedo ver en este momento yo debe tener dos estudiantes
y dos conferencias.
Y luego está el prototipo cadena que me refería.
Así que el que viene por defecto junto con sólo un objeto
en JavaScript, en general,
viene con dos cuerdas valor del constructor.
Y a continuación, los que He añadido a mi mismo
con la addLecture, addStudent y a continuación, las propiedades
que son exclusivas de este instancia de la clase
ya que se ha invocado con la palabra clave new.
Así que hagamos un solo ejemplo más en esta
y luego vamos a paso para algunos las cosas más interesantes
en el lado del servidor.
Así que vamos a seguir adelante y abrir este último ejemplo, que es -
vamos a ver, ¿dónde está el código?
Yo no sé de dónde salió.
OK, bueno, puede ser que acaba de saltar sobre este código a continuación, en realidad -
oh espera, creo que me perdí la hoja de estilo para el código.
OK, así que vamos a hacer esto un poco más grande.
En este ejemplo, yo estoy mostrando un poco más en el ajuste
la cadena de prototipos,
por lo que la creación de la herencia con el código JavaScript.
Así que en este caso, tenemos un catálogo que se va
para mantener presumiblemente múltiples cursos.
Y así un catálogo tiene un métodos addCourse.
Por lo tanto comprueba si el curso que se pasa en una instancia
por supuesto, como se invoca con la palabra clave new.
Así que si usted trata de enviar
en algo diferente, le grite a usted.
El método render que se representar cada uno de los cursos
mediante la compilación de su plantilla a continuación.
Y tenemos el curso que el acceso
en este caso la clase base para cursos de cada departamento.
Y en lugar de configurar cada
del punto supuesto método dot prototipo
o establecimiento en el extienden ayudante en la biblioteca subrayado
a una especie de llamada de extender este prototipo con todo
de estas propiedades, que es útil, un poco más fácil de leer.
Y luego aquí abajo haciendo lo que se conoce como el establecimiento de
en la cadena de prototipo.
Así que esto es en realidad un poco difícil de la gente en un primer momento
e incluso aún habiendo hecho esto por un tiempo, es una especie de disco
para envolver su cabeza alrededor.
Pero no dejes que eso te asuste.
Así que estoy estableciendo una nueva -
una clase completamente nueva objetar aquí, CS.
Y en el constructor,
Estoy diciendo curso aplicar este argumento.
Así que los argumentos es un especial valor que supongo que se podría llamar
en JavaScript, la palabra clave que tiene todo
del todo lo que es pasado a lo largo es argumentos
que la función está disponible con los argumentos llaman,
con la palabra clave argumentos.
Así como yo estoy llamando con el curso dot aplicar,
este es el contexto actual con la que CS se está llamando.
Así que cuando lo invoco con el nuevo que es una - es un valor de CS.
Y lo que digo llamar a este método curso aquí.
Oh, lo siento - llamar a este método curso aquí
pero establecer el valor de esta a ser lo que el valor
de esto es justo aquí.
Así que la palabra clave permite aplicar cambiar especie de estado
de este que es como jQuery se permite a una especie de interruptor
esta en usted como usted va a través de
y hacer una serie de elementos DOM en lugar del objeto jQuery.
Así que ahora me voy a poner una función temporal
que va a captar la prototipo del curso.
Y una especie de configurarlo a su prototipo
y luego establecer el prototipo sobre la función de objeto CS
a una nueva instancia de eso.
Así que, básicamente estoy diciendo en su lugar -
si yo aquí hice CS dot prototipo es igual a nuevo curso.
Entonces sería llamando todo
en esta función constructora,
que no quiero necesariamente querido.
Así que todo lo que estoy haciendo es especie de la creación de casi
como una función sustituta que tendrá el prototipo cursos
en ella y en cierto modo imitar el prototipo -
el curso, pero sin hacer todo en el constructor
y establecer que para el prototipo.
Y entonces yo sólo soy añadiendo por lo que el departamento
en este caso es por ordenador Ciencias para el objeto CS.
Y luego tengo una especie de Versión puente de hacerlo.
No funciona en IE9.
Así que por eso yo quería para mostrar una especie de cómo -
lo que esto está haciendo bajo el capó.
Pero se puede establecer en la misma manera
donde la función es igual a Econ Por supuesto aplicar estos argumentos
y luego decir prototipo dot Econ iguales CreateCourse objeto dot
prototipo de puntos.
Así que ha crea un nuevo objeto que es sólo el prototipo
para el curso y luego establecer el departamento de allí.
Así que ahora vamos a ir establecer un depurador aquí y haga clic en ejecución.
Eso es.
Así CS164 podemos ver el cadena de prototipo que tenemos la
propiedades que eran establecido en el constructor.
Así que los valores de los mismos que se establecen y luego en la cadena de prototipo
para el objeto de CS tenía departamento de Ciencias de la Computación establecido.
Y luego en el subyacente cadena de prototipo,
entonces tenemos todo el métodos y propiedades
que son exclusivos de el objeto del curso.
Y luego tenemos los objetos de la base.
Para que una especie de rápida ejemplo de la cadena de prototipo.
Y como se puede ver aquí, hay son dos valores por departamento.
Así que no hay departamento de la informática
y luego departamento no enumerado que dije
como el valor por defecto aquí.
Así que la cadena de prototipo es en realidad una forma individual
lista de enlaces.
Y ya que trata de encontrar una propiedad,
va a empezar en el valor de nivel superior.
Así que lo que está definido en el la función constructora
y luego una especie de ir por el cadena de prototipos a partir de ahí.
Así que, ya que se encontró, por lo que -
si aquí, digo CS50 Departamento punto,
que va a decir Informática.
Pero si digo var -
[Pausa]
Pero si digo humanidades es igual a nuevo curso
y entonces yo digo humanidades punto departamento,
Voy a ver el departamento que no figuran porque fue a la primera -
Puedo mirar el prototipo cadena aquí en realidad.
Así que se fue primero en el curso objeto y vio que no hay nada
en la cadena de prototipo en este nivel para el departamento
o para los valores de departamento así luego salta al siguiente nivel,
el curso y se ve remitir allí y lo encuentra.
Por lo tanto, sólo una especie de desciende de arriba hacia abajo
y que es una especie de algo que es único
acerca de que JavaScript está que usted puede cambiar cualquier
de estos valores en cualquier momento dado.
Así que en el constructor o en una método individual sobre el objeto
si quiero establecer este departamento para algo nuevo,
o si me quiero ni establecer cualquiera de estas funciones
que ya son existir
a algo nuevo, Yo soy libre de hacer eso.
Así que ahora tengo CS50 dot addLecture, se parece a eso.
Y si quiero ponerlo a CS50 addLecture exactamente igual
a la función en blanco.
Entonces ahora puedo ver que es sólo cambió por completo
que usted no es capaz hacer otros idiomas
donde se tiene una estricta clase basada herencia
y todo es especie de configurar.
JavaScript es muy, muy flexibles con respecto a eso.
OK, vamos a saltar de nuevo en las diapositivas.
Así que si por ejemplo, usted que siempre me gusta una función
tener un especial este valor establecido para ello.
Usted puede llamar a la función de punto de enlace
y establecer cuál es el valor de esto debería ser.
Usted puede pensar en él como -
"Estoy tratando de pensar en una buen ejemplo del mundo real, pero ",
si usted quiere proteger su código
contra alguien potencialmente llamándolo con un valor
eso no sería esto.
Como por ejemplo AJAX callback como exceso o error.
Aquellos normalmente no se llaman
con una buena semántica valor de este.
Y tú estás como: "Bueno, yo siempre quiero que esto sea el valor
del objeto de golf que estoy trabajando.
O el punto de vista que estoy trabajar con en mi código
que representa esta Nodo DOM, se puede establecer -
puede enlazar a este contexto y luego, cuando se llama más tarde
por jQuery y no tiene un buen valor de esta se pegará
a lo que lo bordeaba con.
Luego está llamada a la función se puede especificar el contexto
y especificar cualquier variable número de argumentos.
Y luego está la función aplicar lo que puede pasar
en el contexto y entonces o bien una matriz
o los argumentos de que los objetos He mencionado como ves allí.
Y los argumentos en cualquier función que se llama,
que puede simplemente escribir en la palabra "argumentos"
y que va a tener toda los argumentos.
Tiene una propiedad "de largo"
que es como argumentos mayo fueron en realidad pasó a que los métodos de
ya que en JavaScript se puede ordenar de llamada
con un número variable de argumentos.
Es útil para decir si esto tenía un argumento,
a continuación, siga esta ruta de código.
Si tuviera dos, usted puede ser quiere seguir otro camino.
Esto le permite tener realmente API dinámicos para sus métodos.
Usted puede pensar en que con jQuery
como cuando tienes dólar dot o bind.
Y que tipo de hace diferentes cosas
si pones un argumento o dos o tres
o comenzar con una función.
Se está utilizando los argumentos propiedad
y los argumentos longitud en una gran cantidad de casos
tener esta magia funcionalidad suceda.
Las cosas que no puedes hacer con argumentos se utilizan sólo
por defecto como una matriz.
Así que se puede decir argumentos tres y configurarlo para que algo
como se puede usar la asignación de matriz.
Usted puede utilizar el - un montón de los métodos de subrayado
ya sea para colecciones o para trabajar con matrices,
puede pasar en argumentos y se dará cuenta
que se trata de un argumento objeto y el tipo
de hacerse cargo de eso por ti.
Pero si usted desea utilizar el argumentos que se pasan
a través de una función como una matriz,
puede utilizar subrayado dot dos array.
Uno de los número de funciones de utilidad
que se estructura en subrayar.