Ao aprender JS, qual foi o seu momento Aha? [fechadas]

16

Você se lembra de quando estava aprendendo JavaScript? Qual foi o momento em que você "entendeu" de repente? (Por exemplo, meu momento de CSS foi quando eu aprendi sobre o modelo de caixa ...)

A razão pela qual estou perguntando é que estou aprendendo JS por 6 semanas, mas ainda acho isso bastante confuso. Aqui está uma citação de algo que li recentemente no SO:

"..funções agem de maneira semelhante aos valores, pois method é uma propriedade do objeto que possui o valor de uma função (que também é um objeto)."

Estou curioso para saber se você também ficou confuso no começo e o que fez você entender.

(Estou lendo o Sitepoints "Simplesmente JavaScript", o livro "Eloquent JavaScript" e seguindo o tutorial Essencial de Lynda sobre JavaScript. Não tenho nenhuma experiência em programação e foi péssimo em matemática;)

Obrigado!


fonte
1
Acho a citação confusa e pouco clara para ser honesta, e uso JavaScript com raiva há vários anos, por isso não me surpreendo se for confusa para alguém novo no idioma :)
Russ Cam
Citação e confusão estão chegando porque essa citação está tentando dizer que funções são objetos de primeira classe em javascript. Continue batendo, e você se fornecerá a fonte dos momentos do 'a-ha': quadros de referência adicionais.
chiggsy

Respostas:

15

Acho que o maior momento "AHA" para mim foi quando compreendi completamente o seguinte:

Valores variáveis ​​podem ser qualquer coisa, incluindo funções

var person = {
    name: 'Sean',
    getName: function() { return this.name; },
    numbers: [7, 11, 41]
}

var myvar = person.name;
alert(myvar); //prints name
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //undefined

myvar = person.getName;
alert(myvar); //prints the contents of the function as a string
alert(myvar()); //calls the function
alert(myvar.length); //undefined

myvar = person.numbers;
alert(myvar); //prints contents of array
alert(myvar()); //"myvar" is not a function error
alert(myvar.length); //prints 3

fonte
10

Eu concordo com o que algumas das outras respostas abordaram; O momento do A-ha para mim foi quando eu entendi o que era um fechamento .

Postei uma resposta para a pergunta O que é um fechamento? para ajudar a explicar isso.

Sem entender os fechamentos, o Javascript é uma linguagem bastante limitada, com alguns recursos agradáveis ​​de sintaxe abreviada, como []para matrizes e JSON ( {}para objetos), e no contexto do navegador, o DOM ( window/ document).

No entanto, depois de entender os fechamentos, um monte de entendimento se encaixa :

  • O que realmente é um protótipo ( veja aqui )
  • Por que protótipos são a chave para OOP em Javascript ( veja aqui )
  • Como a maioria dos manipuladores de eventos em Javascript realmente funciona (pode parecer mágica sem entender os fechamentos)
  • Como economizar muito código (e / ou tempo) com retornos de chamada

Recursos

Nicole
fonte
4

Eu acho que a linguagem mais essencial 'Aha's para mim em Javascript era

  • Funções como objetos
  • Encerramentos
  • Orientação a objetos baseada em protótipo
  • Escopo em JavaScript

Para todos esses tópicos, você deve encontrar muitos recursos na web.

(E não pense que tudo se tornará totalmente lógico: JavaScript é confuso)

Alexander Gessler
fonte
Verdade? JavaScript é confuso? Para mim, tudo parece bastante natural. Mas isso sou só eu :-P.
Htbaa 25/03
3

O javascript foi difícil para mim quando comecei a aprendê-lo alguns anos atrás, porque comecei a aprender desenvolvimento web a partir das coisas do lado do servidor (php e perl).

Não era tanto a sintaxe ou OOP, ou qualquer coisa que me escapasse, mais o javascript ao vivo e orientado a eventos - passando de "faça isso e isso e isso e servi-lo e pronto e pronto" para "fazer isso e isso e isso e então estamos em constante estado de espera para que algo aconteça e responda até que o usuário saia da página ". Isso realmente me impressionou.

Acho que não posso citar nada em particular que realmente o tenha afundado (nenhum momento definitivo "aha!" - se eu tivesse que citar um momento específico, diria que quando estava aprendendo AJAX para um script de sugestão de pesquisa, mas IMO isso é apenas arbitrário), mas quando finalmente percebi a diferença, tudo ficou muito mais fácil a partir daí :)

Crayon Violent
fonte
Algumas orientações realmente boas aqui já, obrigado a todos!
1

Quando finalmente entendi a ideia de que posso redefinir qualquer parte do idioma para o que eu quiser. A esse respeito, é ainda mais poderoso que C. Por exemplo, se eu não gostar da toString()função padrão , implementarei a minha:

x.toString = function () {
    return "this is MY toString function biatch!";
}
Travis Webb
fonte
Como isso é realmente diferente de substituir?
27511 Nicole
1

Quando percebi que você poderia definir uma propriedade em um objeto de função.

Também quando finalmente entendi qual era o protótipo.

function Alpha(){
    return 'aplha';
}
Alpha.Beta = function(){
    return 'beta';
}
Alpha.prototype.Delta = function(){
    return 'delta';
}

Alpha(); // 'alpha'
Alpha.Beta(); // 'beta'
new Alpha().Delta(); // 'delta'
timrwood
fonte
0
function Obj() {
    this.x = 42;
    this.value = function() {
        return this.x;
    };
}

var o = new Obj();
o.value();        // 42
var f = o.value;
f();              // undefined??

E o momento do a-ha quando você finalmente obtém esses resultados.

Tomasz Nurkiewicz
fonte
0

Aha momento # 1, para mim: perceber que o JavaScript, a linguagem, é distinto de seu uso principal: HTML dinâmico e programação da Web do lado do cliente. Eu ficaria frustrado com o JavaScript, quando realmente estava frustrado com as incompatibilidades do DOM e do navegador.

Aha momento # 2: Entendendo que a herança pode ser executada de várias maneiras. A herança típica baseada em classe é apenas uma. Existem outros, ou seja, baseados em protótipos (o estilo usado em JavaScript).

Em relação ao item 1, não resisto a recomendar o JavaScript: The Good Parts . Ele trata o JavaScript como uma linguagem refinada.

Michael Easter
fonte
0

Sem escopo e elevação de bloco.

foo(); // function executes, no error

if (...) {
  function foo(){
    ...
  }
}
jasssonpet
fonte
0

É apenas Scheme com sintaxe.

Essa foi a grande para mim.

Jörg W Mittag
fonte
-1

O jQuery foi basicamente o momento do 'a-ha' para mim. A sintaxe parecia familiar após ter muita experiência com a sintaxe LINQ / lambda em C #.

klir2m
fonte