Was war dein Aha-Moment, als du JS gelernt hast? [geschlossen]


16

Erinnerst du dich, als du JavaScript gelernt hast? In welchem ​​Moment hast du es plötzlich "verstanden"? (Mein CSS-Aha-Moment war zum Beispiel, als ich etwas über das Box-Modell erfuhr ...)

Der Grund, den ich frage, ist, dass ich JS seit 6 Wochen lerne, aber ich finde es immer noch ziemlich verwirrend. Hier ist ein Zitat von etwas, das ich kürzlich auf SO gelesen habe:

"..Funktionen verhalten sich ähnlich wie Werte, da Methode eine Eigenschaft des Objekts ist, das den Wert einer Funktion hat (die auch ein Objekt ist)."

Ich bin gespannt, ob Sie am Anfang auch verwirrt waren und was Sie dazu gebracht hat, es zu verstehen.

(Ich lese die Sitepoints "Simply JavaScript", das Buch "Eloquent JavaScript" und folge Lyndas Essential JavaScript Tutorial. Ich habe keine Programmierkenntnisse und war schrecklich in Mathe;)

Vielen Dank!


1
Ich finde das Zitat verwirrend und unklar, um ehrlich zu sein, und ich benutze JavaScript seit einigen Jahren im Zorn, daher wundere ich mich nicht, wenn es für jemanden verwirrend ist, der neu in der Sprache ist :)
Russ Cam

Zitat und Verwirrung kommen, weil dieses Zitat zu sagen versucht, dass Funktionen erstklassige Objekte in Javascript sind. Schlagen Sie weiter, und Sie werden sich selbst die Quelle für Momente geben, die Sie nicht erwarten können: Zusätzliche Bezugsrahmen.
Chiggsy

Antworten:


15

Ich denke, der größte "AHA" Moment für mich war, als ich Folgendes vollständig begriffen habe:

Variablenwerte können alles sein, einschließlich Funktionen

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


10

Ich bin damit einverstanden, was einige der anderen Antworten berührt haben; Der A-ha-Moment für mich war, als ich verstand, was eine Schließung war .

Ich habe eine Antwort auf die Frage Was ist eine Schließung? um dies zu erklären.

Ohne Verständnis für Closures ist Javascript eine ziemlich eingeschränkte Sprache mit ein paar nützlichen Kurzsyntaxfunktionen wie []für Arrays und JSON ( {}für Objekte) und im Kontext des Browsers das DOM ( window/ document).

Sobald Sie jedoch die Abschlüsse verstanden haben, ist viel Verständnis vorhanden :

  • Was ein Prototyp wirklich ist ( siehe hier )
  • Warum Prototypen der Schlüssel zu OOP in Javascript sind ( siehe hier )
  • Wie die meisten Event-Handler in Javascript wirklich funktionieren
  • So sparen Sie sich viel Code (und / oder Zeit) mit Rückrufen

Ressourcen


4

Ich denke die für mich essentiellste Sprache 'Aha' war in Javascript

  • Fungiert als Objekte
  • Verschlüsse
  • Prototypbasierte Objektorientierung
  • Gültigkeitsbereich in JavaScript

Für all diese Themen sollten Sie im Web viele Ressourcen finden.

(Und denken Sie nicht, dass alles völlig logisch wird: JavaScript ist verwirrend)


"Ja wirklich?" JavaScript ist verwirrend? Mir scheint alles ganz natürlich. Aber das bin nur ich :-P.
Htbaa

3

javascript fiel mir schwer, als ich es vor einigen jahren zum ersten mal lernte, da ich das erste mal die web-entwicklung vom serverseitigen ende der dinge (php und perl) aus lernte.

Es war nicht so sehr die Syntax oder das OOP oder irgendetwas, was mir entgangen ist, noch mehr die Live- und Ereignis-getriebene Fähigkeit von Javascript - von "mach dies und dies und dies und serviere es und du bist fertig", dies zu tun und dies und das und dann warten wir ständig darauf, dass etwas passiert und antworten, bis der Benutzer die Seite verlässt ". Das warf mich wirklich für eine Schleife.

Ich glaube nicht, dass ich etwas spezielles nennen kann, das es wirklich zum Eintauchen gebracht hat (kein definitiver "Aha!" - wenn ich einen bestimmten Moment nennen müsste, würde ich sagen, als ich AJAX für ein Suchvorschlagskript lernte, aber IMO ist das nur willkürlich) aber als ich irgendwann den Unterschied begriff, wurde alles viel einfacher von dort :)


Einige wirklich gute Richtungen hier bereits, danke an alle!

1

Als ich endlich die Idee begriff, dass ich jeden Teil der Sprache neu definieren kann, zu was auch immer der Mist, den ich will. In dieser Hinsicht ist es sogar noch leistungsfähiger als C. Wenn mir beispielsweise die Standardfunktion nicht gefällt toString(), implementiere ich meine eigene:

x.toString = function () {
    return "this is MY toString function biatch!";
}

Wie unterscheidet sich das wirklich vom Überschreiben?
Nicole

1

Als mir klar wurde, dass Sie eine Eigenschaft für ein Funktionsobjekt festlegen können.

Auch als ich endlich verstand, was der Prototyp war.

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

Alpha(); // 'alpha'
Alpha.Beta(); // 'beta'
new Alpha().Delta(); // 'delta'

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??

Und der a-ha- Moment, in dem Sie diese Ergebnisse endlich erfassen.


0

Aha Moment Nr. 1 für mich: Die Erkenntnis, dass JavaScript, die Sprache, sich von ihrer hauptsächlichen Verwendung unterscheidet: dynamisches HTML und clientseitige Webprogrammierung. Ich wäre mit JavaScript frustriert, wenn ich wirklich mit dem DOM und den Inkompatibilitäten des Browsers frustriert wäre.

Aha moment # 2: Verstehen, dass Vererbung auf viele Arten ausgeführt werden kann. Typische klassenbasierte Vererbung ist nur eine. Es gibt andere, nämlich prototypbasierte (der in JavaScript verwendete Stil).

In Bezug auf # 1 kann ich nicht widerstehen, JavaScript: The Good Parts zu empfehlen . JavaScript wird als eigenständige Sprache behandelt.


0

Kein Blockieren und Heben.

foo(); // function executes, no error

if (...) {
  function foo(){
    ...
  }
}


-1

jQuery war für mich im Grunde der A-ha-Moment. Die Syntax kam mir bekannt vor, nachdem ich viel Erfahrung mit der LINQ / Lambda-Syntax in C # hatte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.