>> Tudo bem, por isso hoje, Vou estar falando
sobre JavaScript e como é diferente de outras línguas
que você pode ser gostava de PHP.
Assim, na última palestra sobre Segunda-feira, nós conversamos um pouco
sobre o que é semelhante, o que é familiar entre JavaScript
e PHP ou Python ou Ruby ou C ou outras linguagens
que você já está familiarizado.
Mas JavaScript realmente tem uma visão realmente original
sobre o modelo de objeto que faz que tipo de inteiramente diferente
que a maioria das línguas que você está indo para lidar com eles.
Assim, as funções são um tipo
de subvalorizado conceito em JavaScript.
Eles são muito mais poderosos do que eles estão em outros idiomas
porque eles podem in - por uma razão,
eles são capazes de ser definida como valores.
Então, aqui temos var x é igual a função
e é uma primeira classe valor que pode ser passado
em torno de como um argumento.
Então você não tem que declarar a função x
e usar apenas x nesse âmbito.
Você pode passar o valor de x em qualquer lugar ao longo de, você sabe,
como um argumento em outra função
onde você pode módulo de exportação David como mencionado no nó.
Assim, a próxima questão é
que é uma função objeto em JavaScript.
Então você pode realmente definir Propriedades como valores
em uma função e apenas tratar ele como se fosse um objeto.
Então, quando você trabalha com jQuery, você sabe, esse dólar
e, em seguida, você passa um seletor nele
e invocá-lo como uma função.
Mas, então, você também ter dólar dot AJAX.
E isso não tipo de fazer sentido se você pensar
de uma função apenas como sendo algo que você pode invocar
ou ligue.
Mas JavaScript permite que você definir propriedades em funções
propriedades como estáticos com apenas x someProp dot
como indiquei lá fora.
O próximo ponto que estamos vai entrar um pouco mais
em profundidade é o facto funções podem ser tratados
como classes em JavaScript.
Portanto, não há o conceito deste novo operador
o que cria uma nova instância de a função, juntamente com uma espécie
de como o corpo de classe como que vem junto com ele
e nós estamos indo para ir para ele um pouco mais,
ele é chamado o protótipo.
E é o que há de marcas JavaScript muito original em comparação
para outros idiomas que são baseados classe,
JavaScript é um protótipo baseado.
E, em seguida, apenas no o fundo lá,
função pode apenas ser chamado claramente como estamos acostumados.
Então, isso não é nada novo.
Outra coisa que é único é
que as matrizes são realmente objetos.
Eles não são como eles estão em PHP
onde você acabou de criar uma nova matriz.
Esta é realmente uma abreviatura por dizer nova matriz.
E matriz é na verdade um subclasse de um objeto.
Então, isso é algo diferente e eu vou
em um pouco mais de um detalhes sobre isso.
E os recursos de depuração
com JavaScript são realmente inigualável, tanto quanto eu já vi.
Este é um screenshot do Inspetor Chrome
que vamos estar usando para o resto
da apresentação de hoje.
E para chegar a isso, você só ir para o arquivo ferramentas de desenvolvimento
e aberto Inspector Chrome ou você pode clicar
e clique em mostrar elemento I acho que está na página HTML
ou eu acho que é comando opção J abre isso.
Mas nós falaremos sobre isso e você realmente pode definir pontos de interrupção
como você está passando por o código JavaScript e classificar
de avaliar o que o local de variáveis ​​são, qual é o valor
isso é e torna-se maneira mais fácil de depurar o código.
E não - isso não é constrangido a código do lado do navegador
mas você pode realmente executar uma instância
deste Inspector Chrome para o seu código do lado do serviço
o que é muito legal porque você pode percorrer linha por linha
como um pedido vem em sua servidor e ver o que está acontecendo
e brincar com as variáveis no console por aqui.
Então, como eu mencionei, JavaScript é uma linguagem baseada em protótipo
o que significa que existe um conjunto de valores padrão que são uma espécie
de escondido para cada função
no objeto de ponto propriedade protótipo.
Então, é uma espécie de hash apenas diferentes valores padrão
que quando você invocar um funcionar com a nova palavra-chave,
aqueles são definidas por padrão como funções
que estão disponíveis na instância.
Assim que é realmente realmente eficiente para o -
é uma forma eficiente de a criação de objetos de memória sábio
porque o JavaScript tempo de execução só tem de manter o controle
do protótipo do objeto.
É uma espécie de aponta para que
quando você cretae um novo instância de uma classe.
E você também pode imitar herança como é conhecido
em linguagens baseadas em classes onde você tem sorte
de como um presente que se estende, estende-se de que você pode imitar
que no JavaScript através do que é chamado de
cadeia de protótipos.
E vamos ver exemplos sobre isso.
Portanto, se seu - plugins jQuery na verdade, eles recomendam jQuery
autores de usar dólar dot fn para adicionar funcionalidade
para a biblioteca jQuery.
E nós estamos indo realmente para ir para - Então, nessa página,
temos o dólar - Eu incluí jQuery.
E se você fizer dólar dot no console
que eu mencionei trazendo lo através de mudança de comando J
ou apenas indo para ver, Ferramentas de Desenvolvedor, Desenvolvedor
e indo para a guia Fontes.
[Inaudível Observação]
Ah, claro. Então, quando eu comecei a para digitar uma variável,
é auto-preenchido para me o que está disponível lá.
Então eu digitei em dólar e eu puder ver Eu acho que Chrome tem alguns
built-in de dólares, dólar e dólar x.
Então, agora eu só quero dólar e eu coloquei em um ponto.
E então ele me mostra todas as propriedades
que estão disponíveis no objeto jQuery.
Mas se eu fizer dólar protótipo ponto,
Vejo agora todos os métodos que eu estou acostumado a usar
quando eu tenho o dólar, seletor e então eu acorrentar off que com,
você sabe, adicionar classe ou anexar ou borrar ou qualquer um dos outros.
Essas são todas realmente no protótipo
que sob o capô o jQuery cria uma nova instância de si mesmo
e que tipo de esconde tudo esses detalhes de você.
Assim, o ponto que eu era fazendo de volta aqui
com a função, eles na verdade, esconder protótipo de você
e somente o alias ao dólar dot fn.
Assim, a maioria das pessoas, na verdade, não percebem
que é um protótipo de sob as Sim. Aí Hood -
que você pode tocar em e adicionar funcionalidade adicional
para cada instância jQuery se você gostaria.
Assim, o operador "new" é realmente uma espécie de difícil
de entender no início.
Quando você chamar uma função com o "novo",
é uma totalmente diferente forma de chamar a função
como se você acabou de chamar -lo claramente.
Assim, o operador "new" cria o que é chamado de uma nova instância
de um objeto ou uma nova instância, você pode pensar
do objeto como uma classe.
E quando isto acontece, o valor deste que pode ser familiar
com a partir de jQuery, que tipo de definir esta
para o que for conveniente no momento.
Eles costumam defini-lo como o nó DOM atual que você está
em como você está passando como cada ou algo parecido.
Eles - Este valor é suposto para ser o valor da instância
que você criou com o "novo", que inclui tudo
na cadeia de protótipos e todos dos métodos que você encontraria
como propriedades de protótipo.
Então, isso depende de como uma função é chamada,
que o valor desta é.
E isso está muito confuso se você é novo para JavaScript.
Mas todas as funções que é chamado tem um - tem a este valor.
Assim, mesmo se você não tiver criado uma nova instância de alguma coisa,
que esta é assumido para ser global.
Ou você pode chamar uma função utilizando o método de chamada
em que o método se aplica em JavaScript.
Pode a função e especificar o que isso deveria ser.
Assim, você pode torná-lo dinâmico, o que é realmente poderoso
mas também permite que você faça coisas que podem ser enganosas
e confuso para outros desenvolvedores
se não forem usar para o fato.
E jQuery, eu diria torna ainda mais confuso
, fazendo com que seja conveniente e defini-lo
para o nó actual DOM.
Mas a regra simples para lembrar que o valor deste é
quando você está olhando
em uma chamada de funcional é o que sobrou do ponto.
Então se você tem um objeto
e é algo que ponto algo é a função
que você está chamando, em seguida, o primeiro valor é o que o valor
isso é.
Então, aqui está um exemplo de código
onde eu estou criando um novo objeto literal
que é apenas o objeto criado com as chaves
e eu estou definindo nome para Bob
e então eu tenho um sayName método aqui que -
assim dentro deste sayName se eu x dot sayName,
o valor desta for igual ax porque a esquerda
do ponto é x. Portanto, se Eu chamo-x dot sayName,
diria Olá Bob.
E, em seguida, um outro exemplo
onde eu estou, na verdade, atribuindo x dot sayName, a função
para a variável Y, que como eu mencionei
em JavaScript você pode atribuir funções
a variáveis ​​sempre que quiser, é muito flexível que forma,
mas agora quando eu chamo Y, que é perdido no contexto de x.
Portanto, este agora é global ou se você estiver no modo estrito,
Eu acredito que é nulo ou indefinido.
Mas - Então, Y não é o que você está esperando aqui se você está procurando
em x e você vai para chamar sayName,
você está esperando este nome é suposto ser Bob.
Mas se você puxou-lo o objeto e chamou-lhe
por si só, este é agora global.
E isso é o que eu estava mencionando quando você vê dólar dot isso,
muitas vezes você não pensa em o que está realmente acontecendo.
Mas jQuery tipo de tem seu própria linguagem específica de domínio
para lidar com isso e não é o que você está acostumado
no JavaScript.
E eu apontar isso porque é realmente importante
para escrever bem estruturado código orientado a objeto
em JavaScript para realmente ter um bom entendimento e compreensão
de como isso funciona e como O modelo de objeto obras
e como o novo operador trabalha.
Caso contrário, você vai acabar com espaguete jQuery
onde tudo é uma espécie de todo o lugar
e só lidar com o DOM.
Se você pode, na verdade, escrever JavaScript
de uma forma mais estruturada, torna-se muito mais fácil
para trabalhar, para classificar de separar as preocupações
da negociação com o atualizar o DOM e lidar
com a lógica real e código.
Então, vamos dar uma olhada em um alguns exemplos em torno disso.
Então, eu tenho alguns exemplos aqui.
Portanto, este é apenas um exemplo simples do uso de um objeto JavaScript
e adicionando algumas funções para ele e, em seguida, a criação de espécie
de como um aplicativo em miniatura.
Portanto, é muito simples na verdade.
A única coisa que ele faz é num primeiro momento, solicita o seu nome.
Então, eu vou dizer Tim e então você pode mudar o seu nome para Bob.
E isso é tudo isso aplicativo faz.
Mas o que eu gostaria de apontar fora é como ele faz isso.
Então, eu tenho esse gerador de nome objeto que tem um método de início
que pede ao usuário para o seu nome
por apenas chamando este askForName
que aqui ele faz o prompt
se o nome não foi atribuído em seguida, ele pede novamente
chamando este askForName.
E, em seguida, uma vez que recebe o nome, chama este nome da atualização.
Portanto, este, em seguida, define o nome do usuário na tag h1.
E se o nome não é definido, ele gera um erro.
[Inaudível Observação]
Ah, claro. Assim, ele define o nome do usuário na tag h1
chamando SetDisplayName que define o HTML
na JS recipiente nome e Estou prefixar todas as minhas HTML
com seletores JS só porque é um bom hábito de entrar
em apenas fazer não tão confuso
quando você estiver usando seletores como ID de aulas ou
para o estilo e para a lógica
em seu JavaScript aplicações front-end.
Porque se você tem diferentes grupos de pessoas que trabalham
sobre a base de código e você tem um seletor de lá
que o designer decide de mudar, porque é -
não parece tão grande, que eles querem para colocar em uma nova classe e tomar
fora o seu e você está confiando sobre ele para fins de JavaScript,
em seguida, o código de quebra.
É bom para prefixar e classificar
de como namespace quase o Aulas relacionadas com o JavaScript
ou atributos de um prefixo de JS.
Então, isso é muito simples e você pode ver
em todos esses casos, eu sou chamando retornar esta no final.
Portanto, esta é uma boa hábito de entrar,
para dar-lhe uma valor de retorno válido.
Em askForName eu não sou porque isso faz sentido
que você teria o nome de volta.
Mas o que permite você fazer então
se você voltar esta atualização nome, ele está retornando o valor
de que é SetDisplayName retornando o valor deste.
E isso permite que você classifique da cadeia como você está acostumado
no jQuery, devolvendo o valor desta cada vez.
Isso se refere à objetos atuais
assim que você poderia chamar isso de ponto askForName ponto SetDisplayName
e que iria manter o valor deste e permitir-lhe
para ter uma cadeia de bom lá.
E então, em - por isso em Neste segundo exemplo.
[Pausa]
Tudo bem.
OK. Então, vamos em frente e abrir o console
e ir para o meu guia Fontes.
Vamos aparecer isso na verdade.
Assim, no desenvolvedor Chrome ferramentas que mencionei,
há esta peça do lado direito e um -
você pode ver este sinal de parada embora por padrão, ela é negra.
Mas quando você passa o mouse sobre ele, ele diz: "Não deixe o cursor sobre exceções.
Clique na pausa todas as exceções. "
E quando você clica nele novamente, ele fica azul.
E agora a qualquer hora que há um erro lançado
em seu código JavaScript, ele vai parar no ponto e permite que você
para avaliar o que está acontecendo.
Então - e isso é realmente uma útil conceito está prestes a apontar.
E então, se você clicar em novamente, ele fica roxo
e esta é normalmente o que eu mantê-lo dentro
Ele só quebra o código quando existe uma excepção
que não tenha sido pego.
Então, um monte de vezes em jQuery para exemplo, eles tentam capturas
para testar se ou não um navegador tem algum tipo de capacidade
e continuar a partir daí.
Esta é apenas quando há um erro
que não tenha sido pego em uma armadilha tentativa.
Então, vamos tentar apresentar um nome que está em branco.
Então, eu posso ver que o código está agora parado
no método UpdateName e eu posso mouse sobre nomes
e ver o que está vazio em branco.
Não é igual a branco.
Então, se não citar lançar um novo erro e agora posso voltar atrás
através da função coluna e dizer: "OK,
onde veio isso ", e ver o que o valor do cliente é.
Por isso, tem método askForName,
SetDisplayName início e UpdateName.
E este é apenas um realmente útil forma, você pode ver têm todo o
variáveis ​​que estão disponíveis em que o âmbito de aplicação, bem
como as variáveis ​​de fecho, então qualquer coisa que está fechado
mais por esta função.
E assim eu posso ver isso - que o valor do cliente é
e qual o valor desta é.
Então, isso porque somos em jQuery é igual
para o elemento DOM actual.
Mas é realmente útil para a depuração do código
para quebrar em erros como este.
Outra característica do Inspector Chrome é
que a qualquer momento você pode clique sobre as diferentes linhas
na linha e ele vai quebrar nos locais
onde você definir pontos de interrupção eles são referidos como.
Então, se eu clicar, o linha fica azul.
Então deixe-me continuar a execução aqui, OK, que quebrou.
E agora vamos definir o nome para Alice e clique em enviar.
Então agora eu posso ver ainda antes de chegar ao ponto
de atualizar tudo, é agora parou aqui para que eu possa ver
que o meu nome é Alice esta e então eu posso continuar -
deixe-me recarregar a página.
Tudo bem, então agora que é começando no início de novo,
ele parou neste linha e eu posso ver
esse nome é atualmente indeterminado.
askForName é que ele funcione é, de modo que também é frequentemente útil
se você tem funções que são provenientes de diferentes ficheiros
ou lugares diferentes na código, você pode ver onde ele está,
e, em seguida, saltar para que, ele irá destacá-lo.
É tão bom ter o hábito do uso de ferramentas de depuração
que não são apenas consolar log ponto.
OK, então vamos dar uma olhar para um segundo exemplo
que faz mais uso de protótipos como eu tinha aludido.
Portanto, neste exemplo,
estamos criando um novo função chamada CS
e este é capitalizado de modo que o padrão de convenção
em JavaScript é se um função deve ser usado
como um construtor, em oposição
para apenas uma normal, função, é capitalizar isso.
Então, eu tenho de capital CS e este leva um CourseID variável
e que courseTitle I definido para este CourseID,
este courseTitle no construtor.
E então eu também definir estudantes e palestras como matrizes vazias.
Assim, a razão que você -
OK, então o protótipo propriedades foram definidas
aqui em baixo com - para modelo é apenas um sublinhado simples
modelo, um modelo de sublinhado sendo uma forma que você pode -
semelhante aos modelos que David tinha mencionado
no servidor, você pode basta escrever uma tag de script
que não é um JavaScript script, mas um texto HTML
eo que eu estou fazendo com jQuery é -
não manter estes aberto, sim, lá vamos nós.
Com jQuery, está ficando a HTML valor desse modelo
e, em seguida, executá-lo através do ressaltam bibliotecas de utilitários
modelo de motor.
Assim, a documentação por que está aqui em baixo
sob o modelo de utilidade
mas, basicamente, você pode ler um pouco mais sobre ele.
Mas ele avalia essa string e transforma-lo em uma função
que pode, então, passar dados em e chamar dinamicamente.
Os próximos dois métodos que eu tenho são addStudent e addLecture.
Estes apenas adicioná-los à matrizes internas que eu já estabelecidos
no construtor e então o método de renderização.
Então, vamos criar o novo instância do CS chamado 164
que tem este curso número 164 e título.
E, em seguida, CS50 que tem CS50 e introdução ao CS1
e, em seguida, adicionar um pouco palestras aos alunos
e depois chamar CS50 renderizar.
E se eu executar o código, de modo Eu estou fazendo isso com Eval.
Você nunca realmente quer usar o Eval, mas sou apenas uma espécie
de tomar todas as JavaScript que está aqui
e executá-lo em tempo real.
Ela torna a este template estas novas instâncias
da classe CS que têm as propriedades, de modo que nós fomos
através de e feito addLecture e addStudent para cada.
E como mencionei porque eu estou voltando este,
Eu posso realmente acorrentar estes chamadas addLecture e addStudent
e ele vai funcionar tão bem.
A outra característica em JavaScript que é ainda mais útil
no lado do servidor onde Você realmente, em determinado momento
se sua aplicação fica maior não sei onde você está
e é mais difícil de definir esses pontos de interrupção individuais
que eu mencionei em Inspetor Chrome é
usar a palavra-chave depurador.
Então é só D-E-B-U-G-G-E-R.
E quando você coloca um depurador palavra-chave em seu código
e você tem o - lá vamos nós, dois Gs.
Quando você coloca o depurador palavra-chave em seu código
e você estiver executando um depurador
, tais como o cromo Inspector aqui
ou o Chrome lado do servidor Inspector, ele diz JavaScript
para interromper a execução naquela linha de código e, em seguida, ele permite que você
para percorrer o resto de execução dos códigos.
Então, se eu clico executar código aqui, é agora parar
nesta linha depurador e eu puder veja bem, aqui está o valor de CS50
e é um curso tem título, curso de identificação,
ele tem há palestras, nenhum aluno.
E então eu posso passar por todo o addLecture,
Eu posso ver isso está empurrando para estas palestras,
mouse sobre isso, "Olá Mundo".
Eu posso realmente no console de fazer isso de modo que este é definido
para o objeto atual que você está dentro
Esta palestra é "Olá Mundo".
E manter stepping através tanto quanto eu quero.
Se eu não quiser passo
em causa uma chamada de função ' Eu sei o que está acontecendo
fazer entrar em addLecture, há esse botão aqui
que diz: "Passa a próxima chamada de função ", e que eu possa ir
ao ponto foram Estou talvez perguntando sobre alguma coisa.
Como por exemplo 164 renderizar.
Portanto, neste ponto, é vai ser processado.
Eu posso ver este modelo é o modelo compilado.
Eu posso ver neste momento eu deve ter dois alunos
e duas palestras.
E depois há o protótipo cadeia que eu estava me referindo.
Assim, a um padrão que vem juntamente com apenas um objeto
em JavaScript, em geral,
ele vem com duas cordas valor do construtor.
E, em seguida, os que Eu adicionei em mim mesmo
com a addLecture, addStudent e, em seguida, as propriedades
que são exclusivas para este instância da classe
como foi invocado com a nova palavra-chave.
Então, vamos fazer apenas uma mais exemplo nesta
e depois vamos passar para alguns as coisas mais interessantes
no lado do servidor.
Então vamos em frente e abrir Neste último exemplo, o que é -
vamos ver, onde está o código?
Eu não sei onde isso saiu.
OK, bem, nós só poderia pular sobre esse código, em seguida, na verdade -
oh espera, eu acho que eu perdi a folha de estilo para o código.
OK, então vamos fazer esta um pouco maior.
Neste exemplo, eu estou mostrando um pouco mais sobre a configuração
a cadeia de protótipos,
por isso a criação de herança com o JavaScript.
Portanto, neste caso, temos um catálogo que vai
para manter presumivelmente vários cursos.
E assim tem um catálogo um métodos addCourse.
Então, ele verifica se o curso que é passado é uma instância
, claro, como invocado com a nova palavra-chave.
Então, se você tentar enviar
em algo diferente, ele vai gritar com você.
O método render o que vai tornar cada um dos cursos
compilando seu modelo abaixo.
E nós temos o curso que o acesso
neste caso a base para a classe cursos de departamento individuais.
E em vez de definir cada
do ponto claro método protótipo dot
ou propriedade usando a estender auxiliar na biblioteca sublinhado
classificar de chamada estender este protótipo, com todos
dessas propriedades, que é útil, um pouco mais fácil de ler.
E então aqui fazendo o que é conhecido como a criação
a cadeia de protótipos.
Portanto, este é realmente um pouco complicado para as pessoas em primeiro lugar
e mesmo ainda tendo feito isso por algum tempo, é uma espécie de difícil
de quebrar a cabeça ao redor.
Mas não deixe que te assustar.
Então, eu sou a criação de um novo -
uma classe inteiramente nova objeto aqui, CS.
E no construtor,
Estou dizendo que é claro Aplicar esta argumentos.
Então argumentos é uma especial valor que eu acho que você poderia chamá-lo
em JavaScript, o palavra-chave que tem tudo
do tudo o que é repassada é argumentos
essa função estão disponíveis com os argumentos chamar,
com a palavra-chave argumentos.
Então, como eu estou chamando com curso dot aplicar,
este é o contexto atual com que CS está sendo chamado.
Então, quando eu invocá-lo com o novo é um - é um valor de CS.
E eu estou dizendo chamar este Claro método aqui.
Oh, desculpe - chamar este método claro aqui
mas definir o valor desta ser qualquer que seja o valor
isso é bem aqui.
Portanto, a palavra-chave permite aplicar você espécie de alterar o estado
deste que é como jQuery é permitido para classificar de interruptor
esta em você como você está passando
e fazer elementos DOM em vez do objeto jQuery.
Então agora eu estou indo para definir uma função temporária
que vai agarrar a protótipo do curso.
E tipo de defini-lo com o seu protótipo
e, em seguida, definir o protótipo sobre a função de objeto CS
para uma nova instância do que isso.
Então, basicamente eu sou dizendo em vez -
se eu aqui fiz CS dot protótipo é igual a novo curso.
Em seguida, seria chamando tudo
nesta função de construtor,
o que eu não faria necessariamente quisesse.
Então tudo o que eu estou fazendo é tipo de criação de quase
como uma função de substituto que terá o protótipo Cursos
sobre ele e tipo de imitar o protótipo -
o curso, mas sem fazer tudo no construtor
e definir que para o protótipo.
E então eu sou apenas adicionando assim o departamento
neste caso é Computador Ciência para o objeto CS.
E então eu tenho uma espécie de versão ponte de fazer isso.
Ele não funciona no IE9.
Então é por isso que eu queria para mostrar como uma espécie de -
o que isso está fazendo sob o capô.
Mas você pode configurá-lo -se da mesma maneira
onde Econ igual função curso aplicar esses argumentos
e depois dizer protótipo Econ dot é igual CreateCourse objeto dot
protótipo ponto.
Portanto, é cria um novo objeto que é apenas o protótipo
para o curso e, em seguida, definir o departamento de lá.
Então agora vamos apenas definir uma depurador aqui e clique em Executar.
Lá vamos nós.
Então CS164 podemos ver a cadeia de protótipos temos o
propriedades que foram definido no construtor.
Assim, os valores destes que foram criados e em seguida, na cadeia de protótipos
para o objeto CS tinha departamento de Ciência da Computação definido.
E em seguida, no subjacente cadeia de protótipos,
temos então todo o métodos e propriedades
que são exclusivos para o objeto do curso.
E então nós temos os objectos de base.
Então, esse tipo de uma rápida exemplo da cadeia de protótipos.
E como você pode ver aqui, há são dois valores por departamento.
Portanto, não há departamento de ciência da computação
e, em seguida, departamento não listadas que eu disse
como o valor padrão aqui.
Assim, a cadeia de protótipos é realmente apenas um isoladamente
lista de links.
E à medida que tenta encontrar um imóvel,
ele vai começar a valor do nível superior.
Então, o que o definido no a função de construtor
e, em seguida, tipo de descer a cadeia de protótipos de lá.
Então porque é encontrado, então -
se aqui, eu digo CS50 Departamento de ponto,
ele vai dizer Ciência da Computação.
Mas se eu disser var -
[Pausa]
Mas se eu disser humanidades é igual a novo curso
e então eu digo humanidades dot departamento,
Vou ver departamento não listado porque foi a primeira a -
Eu posso olhar para o protótipo cadeia aqui na verdade.
Por isso, foi primeiro para o curso objeto e viu que não há nada
na cadeia de protótipos em este nível para o departamento de
ou para os valores de departamento assim em seguida, ele salta para o próximo nível,
o curso e aparência encaminhar lá e encontra.
Por isso, apenas uma espécie de como desce de cima para baixo
e que é uma espécie de algo que é único
sobre JavaScript que você pode alterar qualquer
destes valores em qualquer momento.
Então, no construtor ou em um método individual no objecto
se eu quiser definir esta departamento de algo novo,
ou se eu ainda quero definir qualquer destas funções
que já estão existir
de algo novo, Eu sou livre para fazer isso.
Então agora eu tenho CS50 dot addLecture, parece que isso.
E se eu quiser configurá-lo para CS50 addLecture apenas é igual a
a função em branco.
Então agora eu posso ver que é apenas mudou completamente
que você não é capaz para fazer outras linguagens
onde você tem uma mais rigorosa classe baseada herança
e tudo é tipo de configuração.
JavaScript é muito, muito flexível no que diz respeito a isso.
OK, vamos saltar para trás nos slides.
Assim, se por exemplo, você sempre gosto de uma função
para ter uma determinada este valor definido para ele.
Você pode chamar a função de ponto de ligação
e definir o que o valor isso deve ser.
Você pode pensar nisso como -
"Eu estou tentando pensar em um bom exemplo do mundo real, mas ",
se você quiser proteger o seu código
contra alguém potencialmente chamá-lo com um valor
que não estaria presente.
Como por exemplo AJAX callback como excesso ou erro.
Aqueles normalmente não são chamados
com uma boa semântica valor deste.
E você é como, "OK, eu sempre quero que este seja o valor
do objeto curso que eu estou trabalhando.
Ou a visão que eu tenho trabalhar com no meu código
que representa esta Nó DOM, você pode definir -
você pode vincular a este contexto e depois, quando ele é chamado mais tarde
por jQuery e ele não tem um bom valor a isso, ele vai ficar
ao que você limitada com ele.
Então há chamada de função foram você pode especificar o contexto
e especificar qualquer variável número de argumentos.
E depois há a função aplicar o que você pode passar
no contexto e em seguida, ou uma matriz
ou os argumentos objetos que Eu mencionei que você vê lá.
E os argumentos em qualquer função que você chama,
você pode apenas digitar a palavra "argumentos"
e ele vai ter tudo os argumentos.
Ele tem uma propriedade "comprimento"
que é como argumentos podem eram realmente passado para que os métodos de
desde que no JavaScript você pode classificar de chamada
com números variáveis de argumentos.
É útil para dizer Se isso tivesse um argumento,
siga este caminho de código.
Se tivesse dois, você pode querem seguir outro caminho.
Ele permite que você tenha realmente APIs dinâmicos para seus métodos.
Você pode pensar em que, com jQuery
como quando você tem dólar ponto em ou bind.
E isso meio que faz coisas diferentes
para saber se você colocar um argumento ou dois ou três
ou iniciá-lo com uma função.
Ele está usando os argumentos propriedade
e os argumentos comprimento em muitos casos
ter essa magia funcionalidade acontecer.
As coisas que você não pode fazer com argumentos é usá-lo apenas
por padrão como uma matriz.
Então você pode dizer argumentos três e configurá-lo para alguma coisa
como você poderia usar a atribuição de matriz.
Você pode usar o - muito dos métodos sublinhado
tanto para coleções ou para trabalhar com matrizes,
você pode passar em argumentos e ele vai perceber
que é um argumento objeto e classificar
de cuidar disso para você.
Mas se você quiser usar o argumentos que são passados
por meio de uma função como uma matriz,
você pode usar sublinhado dot dois array.
Um dos números de funções de utilidade
que são construídas em sublinhar.