Vor einigen Jahren sprachen wir über Den CSS „Ah ha!“ Moment. Das heißt, der Moment, in dem Sie etwas über CSS gelernt haben, das Ihnen einen Klick verschaffte und Ihnen das Gefühl gab, dass sich Verständnis über Sie ergießt. Für CSS war es für mich die Erkenntnis, dass jedes Element auf der Seite eine rechteckige Box war, die sich auf eine bestimmte Weise anordnete, und dass ich die Größe, Position und den Inhalt dieser Boxen beeinflussen konnte.
Machen wir es noch einmal, nur für JavaScript! Wenn Sie das Gefühl haben, ein gutes Verständnis von JavaScript zu haben, was war Ihr „Ah ha!“ Moment? Oder warten Sie noch darauf?
Für mich hatte ich noch nie eine Zeile JavaScript in meinem Leben geschrieben, aber ich nahm das Buch Learning jQuery zur Hand und begann, es auf einem Flug zu lesen. Ich hatte den Moment, als ich erkannte, dass jQuery im Wesentlichen eine „Finde etwas, tu etwas“-Bibliothek war. Ich kannte bereits CSS, und jQuery verwendete CSS-Selektoren für den „Finde etwas“-Teil. „Tue etwas“ in jQuery kann so einfach sein wie „klicken“, „verstecken“, „anzeigen“, „slideToggle“ usw. Das kann sogar ich, dachte ich, und ich eilte in mein Hotelzimmer und begann zu spielen.
Für mich war dieser Moment, als ich erkannte, dass alles ein Objekt war.
Ich auch! Denken wie ein Objekt ändert alles!
Zählen Sie noch einen Punkt für alles ist ein Objekt. Das ging auch Hand in Hand mit einem DOM „Ah ha!“-Moment später am Tag aus sehr ähnlichen Gründen.
Ich auch! Ich war total verblüfft darüber! :D
Könnte das jemand erläutern? Ich habe das schon öfter als wirklich wichtig gehört, verstehe es aber immer noch nicht ganz. Danke!
Danke @Charlie für deine Antwort. Tatsächlich ist Zeit Geld und es macht keinen Sinn, in die Vergangenheit zu reisen, um veraltete APIs zu lernen, wenn die ganze Welt darauf blickt, ultraproduktiv zu sein.
Als ich ein Kind war, zerstörte ich alle meine Spielzeuge auf der Suche nach den Gründen, wie sie funktionierten; und auf die gleiche Weise macht es mich traurig, wie viele Leute täglich jQuery benutzen, ohne wirklich zu verstehen, was hinter den Kulissen passiert.
Wissen Sie, wie @ezekiel sagte, JS ist (auf seine eigene Weise) selbst zu 100 % objektorientiert? Ich habe nur mit dieser Forschung eine Abschlussarbeit geschrieben! Schauen Sie sich gerne die Website an, http://lab.pragres.com/sweb/, die sich noch in den Laboren meines Unternehmens befindet.
Noch eine Stimme für alles ist ein Objekt. Alles sehr einfach, nachdem man das gelernt hat.
Die Erkenntnis, was „Objekte“ sind, hat mir bei ALLER meiner Programmierung geholfen. PHP hat zum Beispiel enorm profitiert.
Mein Aha-Moment mit JavaScript steht noch bevor, aber ich hatte definitiv einen, als ich den Kommentar von Salvi gelesen habe! :)
Es ist ein Objekt! Dann war plötzlich alles klar
Definitiv der „es ist ein Objekt!“-Moment. Hat meine Art, JavaScript zu schreiben, komplett verändert.
Ich wünschte SO SEHR, JavaScript wäre objektorientiert. JavaScript ist, obwohl objektbasiert, prototypenorientiert. Nun bedeutet das nicht, dass man mit der Sprache nichts tun kann, das sie *objektorientiert* erscheinen lässt. Das kann man. Aber es ist kein Teil der Sprachsyntax.
Noch 1 Stimme dafür
Aber JavaScript *ist* objektorientiert. Es ist nur nicht klassisch. Zu sagen, es sei nicht objektorientiert, weil es keine Klassen gibt, ist so, als würde man sagen, es gibt keine Variablen, nur weil es keine strenge Typisierung gibt.
Alles ist ein Objekt :)
Wenn Ihnen dieser Ansatz gefällt, sollten Sie Ruby ausprobieren.
Zahlen, Codeblöcke, Klassen und im Grunde alles ist ein Objekt.
Um paradox zu sein, die Klasse des Klassenobjekts ist sie selbst.
Mein JavaScript Aha!-Moment war, als ich erkannte, wie ähnlich es PHP ist. Variablen einrichten, Funktionen einrichten, aus dem DOM holen, verarbeiten, ausgeben… das ist im Grunde alles.
Ich auch! WOOT! Los PHP!!!
Ich glaube, Sie werden bald einen „Ah-ha“-Moment erleben, wenn Sie erkennen, dass JavaScript und PHP eigentlich nicht ähnlich sind. Client-seitig vs. Server-seitig… das Einzige, was ihnen gemeinsam ist, ist, dass sie beide Programmiersprachen sind.
Meine waren JavaScript-Closures. Nachdem ich bei einem Vorstellungsgespräch damit durchgefallen war. Ich wusste, dass ich mich wirklich mit Closures auseinandersetzen musste. Wenn ich also allen hier etwas mit auf den Weg geben darf, dann ist das meine Sicht auf Closures, und ich hoffe, es hilft.
Wie ich es verstehe, ist eine Closure auf einer grundlegenden Ebene eine zurückgegebene Funktion, die Variablen/Werte aus der Elternfunktion, die sie zurückgegeben hat, umschließt (nicht referenziert). Ich hoffe, meine Erklärung ist richtig und wenn ja, hoffe ich, dass sie jemandem hier hilft.
Eine Closure ist die Menge von lokalen Variablen, die nach Abschluss eines Funktionsaufrufs lebendig gehalten werden, weil diese Variablen von einer lokalen Funktion noch benötigt werden und eine Referenz auf eine lokale Funktion während des Funktionsaufrufs irgendwie exportiert wurde.
Die lokale Funktion kann von der umschließenden Funktion zurückgegeben werden, das ist eine Möglichkeit, ihre Referenz zu exportieren, aber es gibt auch andere gängige Wege: Die lokale Funktion kann an ein Ereignis angehängt, in ein Array eingefügt werden, alles, um zu verhindern, dass sie dereferenziert wird, sobald die umschließende Funktion beendet ist.
* Es müssen nicht unbedingt Funktionen sein, es kann jeder Ausführungskontext sein, aber bleiben wir vorerst bei Funktionsaufrufen, ja?
Eine Closure ist effektiv alles, was zu einem abgelaufenen Ausführungskontext gehört, der noch nicht verworfen werden kann, weil noch Referenzen darauf vorhanden sind.
Ich kann nicht sagen, dass ich Closures als JavaScript-Aha-Moment beschreiben kann, das war ein eigenständiger Aha-Moment, jenseits von JavaScript. Ich meine, man kann JavaScript „begreifen“, lange bevor man Closures begreift, sie sind ziemlich fortgeschritten.
Die meisten Leute entdecken Closures eher zufällig, lesen ein bisschen und fangen dann an, sie bewusst zu nutzen, ohne sie jedoch vollständig zu verstehen. Das macht sie zu einer so kniffligen Interviewfrage, weil es die Art von Dingen ist, die Leute nutzen können, ohne sie wirklich erklären zu können. (Und es gibt viele schwer lesbare Tutorials zu diesem Thema, was nicht hilft.)
Jetzt fragen Sie mich, welche Art von Vorstellungsgespräch man durch das Nichtverstehen von Closures verpatzen kann. Sie klingen extrem wichtig für das fortgeschrittene JavaScript-Verständnis, aber ich bin etwas überrascht, dass man ein Vorstellungsgespräch durch das Nichtverstehen von ihnen verpatzen kann.
Es waren Closures und noch mehr. Eine wirklich fortgeschrittene JS-Rolle, für die ich mich beworben habe.
@Lee Kowalkowski: Ahaaa!! (na, hier ist es :D)
Closures, ich weiß, was sie sind, aber eine schriftliche Erklärung verwirrt mich immer noch. Stoyan Stefanov zeichnet Ihnen ein Diagramm. Ich habe mir das angesehen und das Licht in meinem Kopf ging an. Es ist ein brillantes Buch.
Objektorientiertes JavaScript von Stoyan Stefanov.
Hmm, am kürzesten hatte ich einen kleinen Aha-Moment, als ich erkannte, wie wenig von dem JavaScript, mit dem ich arbeite, vor DomReady operieren sollte. Und der einzige Weg, um ein großartiges DomReady cross-browser zu erreichen, ist mit etwas, das getestet wurde, wie z. B. jQuerys DomReady-Funktionen oder die DomReady-Bibliothek, die aus jQuery herausgenommen wurde.
Im Wesentlichen die Erkenntnis, dass ich vor jQuery wahrscheinlich sowieso alles falsch gemacht habe.
Äh, ich meinte, dass selbst .hide() oder .show() in domready eingepackt werden müssen. Also sooooooooooooooooooooooo….so ziemlich alles außer Funktionsdeklarationen.
Lang lebe jQuery.
1. Alles ist ein Objekt.
2. Closures.
3. Funktionen können gespeichert und weitergegeben werden.
Unterstützt. Sobald Sie diese drei Dinge in Ihrem Kopf haben, können Sie von „Dinge mit JavaScript tun“ zu „Dinge mit JavaScript erschaffen“ übergehen.
Dasselbe oben bei den drei Dingen für mich. Auch ‚anonyme‘ Funktionen. Man kann einfach den gesamten Funktionskörper an eine andere Funktion übergeben.
Ähnlich wie Hector. Mein Aha-Moment war, als ich begann, Objekte in reinem JavaScript zu erstellen. Es klickt wirklich, wenn man versteht, dass eine Methode nur eine Funktion innerhalb einer Funktion ist. Mein zweiter Aha-Moment war, als ich zu verstehen begann, dass alles ein Objekt ist.
Es ist lustig, dass Sie das posten, denn gestern Abend, als ich meine Website neu gestaltete, googelte ich nach jQuery, um mehr darüber zu erfahren. Ich verstehe jetzt (6 Stunden später) vieles davon. Also, ich schätze, mein Aha-Moment wäre, als ich erkannte, dass jQuery & JavaScript so viel Potenzial haben und wie oben erwähnt, es ist einfach eine objektorientierte Sprache. Ich hatte immer Angst, als ich es auf Ihrer Website sah, jetzt bin ich bereit!
Eigentlich geht es bei jQuery um „wenn etwas passiert, finde etwas, tue etwas“, weil JavaScript ereignisbasiert ist.
Mein Aha-Moment steht noch bevor, schätze ich xD
Nun, ich widerspreche Ihrer Aussage „JavaScript ist ereignisbasiert“...
JavaScript ist objektorientiert (Prototyp-Stil) mit etwas funktionaler Programmierung.
Sie können definieren, wie sich Ihre Dokumentelemente (Objekte) verhalten, wenn ein Ereignis ausgelöst wird, aber die Event-Handler sind Objekteigenschaften… das DOM und das Browserfenster können Ereignisse auslösen, nicht das JS.
Ich erinnere mich nicht, jemals einen JavaScript-Aha-Moment gehabt zu haben, und ich programmiere seit mehreren Jahren darin. Ich denke, das liegt daran, dass JavaScript so nachgiebig und funktional ist, dass es den Programmierern erlaubt, sich auf eine Weise auszudrücken, die ihnen bereits vertraut ist.
Mein Moment war, als ich herausfand, dass jede Operation einen Wert zurückgibt.
Ich habe versucht, einige sequentielle Animationen zu erstellen, und alles lief ständig gleichzeitig. Ich fand ein Beispiel im riesigen Internet, das eine Funktion in einer Funktion verschachtelte. Meine Elemente begannen sich so zu bewegen, wie ich es wollte, und ich war losgelassen. Alles wurde danach lustig.
Ich begann in den frühen Jahren in Netscape mit JS zu spielen, und alles war zu dieser Zeit etwas verschwommen, aber mein Aha-Moment war, als ich die Beziehung zwischen DOM und JS-Objekten entdeckte und man über Methoden auf Eltern und Geschwister zugreifen konnte. Im Grunde war es ein doppelter Aha-Moment für mich, da die DOM-Idee bei mir auch klickte.
Kommen Sie schon, das war 1998 oder so :-)
Vor ein paar Jahren, als ich anfing, AJAX-Anfragen manuell zu stellen (damals noch nicht jQuery). Bis dahin war alles, was ich schrieb, einfach prozeduraler/funktionaler Code, und ich kümmerte mich nicht um ereignisbasierte oder objektorientierte Muster. Das war auch, als ich lernte, wie man das alte Inline-
onClick='doEvent()'vermeidet und mit unobtrusive JavaScript beginnt.Ich habe mir JavaScript auf http://javascript.crockford.com/ angesehen und dann das Konzept von Lambda-Funktionen und Closures kennengelernt. Es war umwerfend.
Vielen Dank an Mr. Crockford
Wie viele andere war es das Verständnis von Closures, als plötzlich alles irgendwie zusammenpasste. Und selbst nachdem ich dachte, ich könnte JavaScript, war das Lesen von Stoyan Stefanovs „JavaScript Patterns“ voller kleiner Aha-Momente.
Ich unterstütze Stoyans Buch „Javascript Patterns“!!
So viele Aha-Momente in diesem Buch, dass es für fortgeschrittenes JavaScript unerlässlich ist!
Es ist das Geld absolut wert und deckt einen weiten Bereich ab!
Ich stehe erst am Anfang der JavaScript-Möglichkeiten, aber mein jüngster JS-AHA-Moment war, als ich das Konzept des Übergebens von Argumenten an Funktionen und die allgemeine Verwendung von OOP verstand :-)
Nun, aus der ActionScript-Welt kommend (nicht hassen), klickte für mich, dass DOM-Elemente wie MovieClips sind.
Sie haben mir gerade einen ActionScript-Moment beschert. Zu schade, dass ich es nie wieder benutzen muss oder will.
Ich hatte drei große Aha-Momente in den verschiedenen Phasen der Expertise
1. Bevor ich JavaScript lernte, wurde Code immer sofort ausgeführt und das einzige Anhalten erfolgte über Benutzeraufforderungen. Mein erster „Ah ha“-Moment kam, als ich erkannte, dass Code in Funktionen gekapselt und an bestimmte Ereignisse angehängt werden konnte.
2. Mein zweiter „Ah ha“-Moment kam, als ich die Idee von JavaScript vom DOM trennen konnte. DOM-Manipulation ist nur eine Verwendung von JavaScript, aber es ist nicht JavaScript selbst.
3. Schließlich, und erst kürzlich, haben die Douglas Crockford Yahoo-Videos meine Kenntnisse erheblich vertieft. Die mysteriösen Dinge, die jQuery und andere Bibliotheken taten, ergaben endlich Sinn, als ich die Prototypenkette verstand und alle Daten und Funktionen als Objekte betrachtete.
Der große Moment für mich war, als ich das Modulmuster zur Erstellung von Objekten in JS kennenlernte. Das war mein erster Geschmack von objektorientiertem JS und verwandelte meinen Code von einem Haufen Funktionen in eine strukturierte Webanwendung.
Ich stimme zu. Die Verwendung von Design Patterns war für mich der Eureka-Moment. Sie sind für gut geschriebenes JavaScript weitaus wichtiger als für PHP. Das Buch, das mir die Tür geöffnet hat, war Pro JavaScript Design Patterns von Dustin Diaz und Ross Harmes.
Modulmuster, ja! Ich denke, es hat meine Sicht auf JavaScript verändert.
Noch eine Stimme für das Modulmuster hier… Allerdings verwende ich meistens das Revealing Module Pattern, um genau zu sein.
Ich bin kein JavaScript-Meister... ehrlich gesagt, ich bin mir nicht einmal sicher, was Closures sind... obwohl ich sie vielleicht benutze. Ich hatte bisher zwei Aha-Momente.
1. JavaScript ist prototypisch… dieses Wort ergab für mich keinen Sinn, bis ich erkannte, dass es „fast objektorientiert“ bedeutet.
2. Viel JavaScript zielt direkt auf das DOM ab. Bevor es jQuery gab oder zumindest verbreitet war, habe ich es nur für Timer und Ähnliches verwendet. Aber Bibliotheken haben viele Leute dazu gebracht, mehr mit dem DOM zu machen, als sie es früher getan hätten.
Sie hatten einen jQuery-Aha-Moment. Der JS-Moment steht noch bevor. Ich stimme vielen Leuten hier zu: Alles ist ein Objekt, Closures, und wenn es um Browserinteraktion geht (was jQuery sehr einfach und sehr CSS-ähnlich macht), war Event Delegation der Moment, als ich anfing zu denken JA!
Ich habe jedes Mal einen JavaScript „AHA!“ Moment, wenn ich ihn benutze. Es ist jedes Mal dasselbe. Es ist
„Aha! Ich verstehe nichts von dieser Sprache!“
:)
(Mit anderen Worten, ich lerne wahrscheinlich jedes Mal etwas über JavaScript, wenn ich es benutze.)
Das stimmt auch für mich. Und eines ist sicher: „Aha“-Momente sind von den Göttern gesandte Süße. ;)
Das ist einer der Gründe, warum ich http://www.tiljs.com/ gebaut habe, um meine JavaScript „Aha“-Momente zu teilen und von den „Aha“-Momenten anderer Leute zu lernen. Und ich glaube, wir können zustimmen, dass JavaScript viele Tricks und Tücken hat, die einen „Aha“-Moment auslösen können. :)
Mein Aha-Moment war, nachdem ich jahrelang mit JavaScript gearbeitet hatte und versuchte, mir den JQuery-Code anzusehen und herauszufinden, was vor sich ging. Ich erkannte (und wusste es wahrscheinlich schon), dass ich nur über 0,05 % von dem weiß, was ich mir in JavaScript wünschen würde. Es gibt wirklich talentierte und geniale Entwickler da draußen, und ich danke ihnen für ihre harte Arbeit bei der Gestaltung des Webs.
Wirklich, einige Aha-Momente müssten sein, als ich las, wie man Stile über JavaScript in JQuery modifiziert, und als ich las, wie Pinterest seine Pin-Neupositionierung mit JavaScript und Mathematik machte.
Mein Moment war, als ich herausfand, dass „$“ der Name der jQuery-Funktion war und man Parameter an sie übergab und sie die ganze harte Arbeit leistete, diese Elemente/Objekte zu finden. Am längsten habe ich jQuery benutzt, ohne wirklich zu wissen, was es tat (ja, ich habe jQuery vor JS gelernt).
Ja! Das Verständnis von $ ist ein cooles Beispiel für einen Aha-Moment!
Warte immer noch auf meinen Aha-Moment…
Jamie, lies den Artikel „jQuery Types“… danach wird dein Aha-Moment kommen…
Meine war, als ich ein Flash-Menü erstellen musste, das eine MySQL-Datenbank auf einer Magento-E-Commerce-Site verwendete. Ich habe damals gleichzeitig ActionScript, JavaScript, PHP und MySQL gelernt. Ich habe PHP verwendet, um die Menüpunkte in einer JS-Variable aufzulisten, die ich dann über ActionScripts externe Schnittstellenklasse gelesen habe.
Der Moment, als ich den „Ah ha“-Moment hatte, war, als ich fertig war und erkannte, dass ich die Dinge ohne Flash einfacher hätte machen können.
Wir alle lieben das mächtige jQuery, aber wer niemals mit reinem JS-API gekämpft hat und gelernt hat, wie und WARUM die Client-Server-Skripte funktionieren, der hat meiner Meinung nach weniger Möglichkeiten, einer echten, herausfordernden Web-Programmierumgebung gegenüberzutreten.
Ich habe mehr als 3 Jahre mit jQuery gearbeitet (und weitere drei Jahre ohne), und oft musste ich etwas mit meinem alten Freund document.getElementById() laden oder XML mit einem klassischen for durchlaufen, oder eine CSV-Datei für mein altes Freundes klassisches Array erstellen.
Zusammenfassung: Um jQuery vollständig zu verstehen und somit in der Lage zu sein, gegen jede ungedeckte jQuery-Situation (davon gibt es viele, auch wenn sie schwer zu finden sind) anzukämpfen, ist ein starker JS-Hintergrund unerlässlich.
Also… wer ist mit mir? :-)
Das ist ein sehr guter Punkt, Salvi. Es ist ein bisschen so, als würde man dunken wollen, ohne zu lernen, wie man dribbelt. Grundlagen zuerst, Spiel des Tages später.
Allerdings habe ich so viel zu tun und so wenig Zeit. Die meisten von uns müssen dort anfangen, wo wir sind, und loslegen. Ich bleibe bei Coffeescript und jQuery und folge von dort aus. Ich habe einfach nicht die Zeit, mich mit den Grundlagen von JavaScript zu befassen. Wenn ich jemals etwas baue, das mich in eine der von Ihnen beschriebenen Ecken drängt, werde ich Ihnen viel Geld zahlen, um mich herauszuholen.
Charlie,
Ich habe früher dasselbe gesagt. Ich war stärker in jQuery, schwach in natürlichem JavaScript. Lange Zeit konnte ich in jQuery programmieren und erzielte gewünschte Ergebnisse, aber ich habe nie wirklich verstanden, warum sie so funktionierten. Dann wurde ich in eine Umgebung geworfen, die chaotisches jQuery und alte, richtig geschriebene JavaScript mit Objekten, Funktionen, Schleifen und Ähnlichem war. Lassen Sie mich Ihnen sagen, ich ging vom Gefühl eines Genies zum Gefühl eines Affen, der sich am Kopf kratzt.
Ich denke, es ist auch ein Missverständnis, dass jQuery „den Leuten so viel Zeit spart“. Bis zu einem gewissen Grad und für bestimmte Dinge ja, aber einige Dinge in Standard-JavaScript zu tun, ist tatsächlich schneller, sowohl beim Programmieren als auch bei der Leistung.
Jedenfalls ist mein Punkt, dass man grundlegendes JavaScript nicht so schnell abtun sollte. Sie könnten überrascht sein, wenn Sie es brauchen.
Außerdem, wenn Sie die Grundlagen von JavaScript nicht verstehen, schreiben Sie wahrscheinlich auch schlecht formatierte und schlecht funktionierende Codes.
Ein Pflaster auf einen platten Reifen zu kleben, mag Sie nach Hause bringen, aber es bringt Sie nicht nach Kanada.
Als ich erkannte, dass fast alles ein Objekt ist und was nicht, es sich zumindest so verhalten kann, und natürlich ‚Closures‘, sobald man es versteht, kann man das Gefühl haben, die Sprache wirklich zu kennen.
Außerdem denke ich, dass ich zu spät bemerkt habe, dass JavaScript einen funktionalen Geltungsbereich hat, das hätte ich gerne von Anfang an gewusst :S
Gerade was zum Teufel „this“ war…
Ich liebe diesen Punkt. Ich hatte diese Erkenntnis zweimal in den letzten zwei Wochen.
1. Wenn Sie
setTimeoutaufrufen, bezieht sichthisjetzt aufwindow. Also müssen Sie innerhalb einer Funktion Folgendes tun:function someFun(){
var newThis = this;
setTimeout(function(){
alert(newThis);
}, 100);
}
Das Interessante ist, dass der Geltungsbereich der inneren Funktion global ist, aber Sie können von innerhalb der Funktion auf eine lokale Variable zugreifen. Seltsam??
2. Ich arbeite seit kurzem mit Backbone/Underscore und
thisändert sich ständig und man muss seinem Scope wirklich folgen.Mein Aha-Moment war, als ich unbewusst Closures in einem Prozess zur Lösungsfindung für ein Problem verwendet habe. Ich war froh, dass ich nach langem Kampf endlich ein gewisses Verständnis dafür hatte. Und auch einige Aha-Momente beim Lesen von Stefanovs OO Javascript… Ein tolles Buch ist es.
http://tiljs.com – schöner Feed
ich arbeite an etwas Ähnlichem, aber alles HTML-bezogen.
Zunächst muss ich sagen – langjähriger Leser/Lurker hier, aber ich muss Ihnen, Chris, ein großes Lob aussprechen. Ihre Beiträge sind immer an der Spitze von Neuem und Frischem, und ich kann Ihnen gar nicht sagen, wie viel ich von CSS Tricks lerne. Dafür möchte ich Ihnen danken – tausendmal.
Zur Frage: …als ich erkannte, dass ich keine Semikolons vergessen hatte und alles so funktionierte, wie ich es beabsichtigt hatte.
Warte immer noch darauf, ich bin ein Neuling bei jQuery und JS… kann mir jemand einen Weg zum Kaninchenbau zeigen?
Du solltest dir Jeremy Keiths Buch über JavaScript ansehen, es heißt – „DOM Scripting – Web Design with JavaScript and the Document Object Model“. Ich gehe es gerade durch und bisher hat es mir viel beigebracht! (Ich bin auch Anfänger mit JS)
Schauen Sie sich den „30 days to learn jQuery“-Kurs von Nettuts an, damit erhalten Sie einen guten Start, dann werden einige der anderen Blogs anfangen, ein wenig mehr Sinn zu ergeben, bis Sie Ihren Erleuchtungsmoment haben und dann werden sie alle Sinn ergeben.
Dass, wenn Sie ein neues Objekt erstellen, Sie (mehr oder weniger) eine Kopie seines Prototyps erstellen.
Mein „aha“-Moment bestand aus mehreren kleinen. Der größte davon war das Konzept der Erstellung von Klassen in JavaScript.
z.B.
Ihr Kommentar ist ein Aha-Moment. Ursprünglich dachte ich, es sei, als ich auf den Prototyp meines eigenen benutzerdefinierten Objekts von Arrays zugriff. Aber das eröffnet eine neue Tür zur Manipulation von DOM, die ich nicht in Betracht gezogen hatte.
Für mich war der größte „Ah ha“-Moment, als ich erkannte, dass ich console.log(etwas) anstelle von alert(etwas) verwenden und es in der Konsole überprüfen kann. Der Moment der größten Frustration ist nun vorbei.
Der 2. ist, wie sich $(this) von ‚this‘ unterscheidet, manchmal bin ich einfach verwirrt und muss console.log(this) aufrufen, um sicherzustellen, dass ich auf dem richtigen Weg bin.
Der 3. sind wahrscheinlich die Operationen mit JS, ich habe nicht erkannt, dass 1 + 1 11 (als String) in JS statt 2 (als Zahl) sein kann… für mich ist das einer der coolsten Aha-Momente.
Aber das bedeutet nicht, dass meine „Ah-ha“-Momente aufhören. Ich denke, ich werde wahrscheinlich noch viele weitere „Ah ha“-Momente haben, während ich mit JS / jQuery in den neuen kommenden Projekten arbeite. Dieses Gefühl, etwas zu erkennen, das man haben sollte, ist so besonders und ich kann es kaum erwarten, es wieder zu haben.
Der Moment, als ich lernte, dass Strings wie „2.13“ durch ein vorangestelltes + in Zahlen umgewandelt werden können.
Für mich war es Scope / Closures. Es ist der häufigste Fehler für Neulinge.
@Leo V – Ich habe einen Blogbeitrag geschrieben, der die Grundlagen von JavaScript aus der Sicht eines .Net-Entwicklers einführt. Er könnte Ihnen beim Einstieg helfen. Getting Started With JavaScript
Als ich erkannte, dass man ‚new‘ auf eine Funktion anwenden kann, um sie als Konstruktor für ein neues Objekt zu verwenden.
Für mich war es, als ich diesen Kurs absolvierte, gerade erst kürzlich
http://tutsplus.com/course/30-days-to-learn-jquery/
Mein Moment kam, als ich erkannte, dass ich JavaScript als Steroid für CSS verwenden konnte: Ich konnte Klassen und Stile dynamisch hinzufügen/entfernen, auf Arten, wie ich es sonst nicht könnte.
Es ist seltsam, je mehr ich über JS lerne, desto mehr Aha-Momente scheine ich noch freizuschalten zu haben.
Meine drei größten Aha-Momente waren
1. Die Erkenntnis, wie formbar/flexibel/leistungsstark die Kombination aus First-Class-Funktionen, prototypischer Vererbung und Closures JavaScript macht.
2. Als ich beschloss, eine eigenständige Version einer Bibliothek zu schreiben, die ich ursprünglich mit einer starken jQuery-Abhängigkeit geschrieben hatte, indem ich meine eigene extrem minimale Version von jQuery schrieb, was mich dazu veranlasste, den Quellcode von jQuery, Zepto und Underscore zu lesen, um zu sehen, wie sie ihren „Zauber“ vollbrachten.
3.Code für Node.js schreiben.
Mein Moment war, als ich ein textbasiertes Rollenspiel in rohem JavaScript schrieb. Ich benutzte JS-Fake-Klassen, um Entitäten in der Engine zu erstellen, mit Funktionen in den Klassenmemberfunktionen. Es machte die Erstellung des Spiels viel einfacher.
Ich kenne noch nicht viel reines JavaScript, aber in letzter Zeit hatte ich einen riesigen jQuery-„Ah hah“-Moment. Das liegt alles daran, dass ich mir den Kurs „30 days to learn jQuery“ von Net Tuts angesehen habe. Ich stecke bei den Lektionen 9 und 10 von 30 fest, aber das liegt hauptsächlich daran, dass diese Lektionen einen so großen Einfluss auf mich haben. Ich schreibe seit Jahren jQuery und wurde bei meinem aktuellen Job hauptsächlich eingestellt, weil ich viel über jQuery weiß, aber was mir diese Lektionen gezeigt haben, lässt mich die Art und Weise, wie ich jQuery schreibe, komplett überdenken.
Mein „Ah hah!“-Moment war, dass ich mein jQuery tatsächlich sauber strukturieren kann. Wenn ich das jetzt sage, klingt es irgendwie offensichtlich, aber es hat einen enormen Einfluss auf meinen Code. Außerdem habe ich ein paar Strukturierungstipps gelernt (hauptsächlich aus dem oben genannten Kurs), die zu viel saubererem Code von meiner Seite beitragen. Ich speichere jetzt jeden jQuery-Aufruf, den ich mehr als einmal machen muss, überdenke die Art und Weise, wie ich alles in jQuery strukturiere, benutze Funktionen und objektorientiertes Programmieren stärker, scope meine Variablen, benutze mehr Kontrolle über „this“ und definiere Variablen in Komma-separierten Listen. Insgesamt schreibe ich an vielen Stellen etwa ein Viertel des Codes und finde Elemente etwa ein Sechstel so oft.
Außerdem habe ich gerade angefangen, meine ersten kleinen jQuery-Plugins zu schreiben. Wenn etwas immer wieder getan werden muss, schreibe ich manchmal ein kleines jQuery-Plugin anstelle einer Funktion, um die Vorteile von jQuery zu nutzen. Ich beginne zu verstehen, was es bedeutet, jQuery zu erweitern und die Funktionsweise von jQuery zu verändern, und ich verstehe endlich, wie man $.extend() verwendet, um Standardwerte zu definieren und diese dann zu überschreiben.
All dies bringt meinen Code auf ein völlig neues Niveau, mit besserer menschlicher Lesbarkeit, schnellerer Ausführung und viel saubererem, schlankerem Code.
Mein Aha-Moment war kürzlich, als ich erkannte, wie wenig JavaScript ich eigentlich weiß! Und zu erkennen, dass es für mich wichtig ist, die Grundlagen zu lernen, genauso wie coole Sachen mit jQuery zu können.
Ein weiterer Aha-Moment war die Erkenntnis über die Wiederverwendung und das Übergeben von Dingen an Funktionen, und gleichzeitig zu erkennen, wie viel zu lang und unordentlich mein Code gewesen war :D, aber insgesamt zu erkennen, wie viele weitere Aha-Momente noch kommen werden, während ich lerne und mich verbessere :)
Ich habe JS mit jQuery als Einstieg gelernt. Ein großer Schritt für mich war zu lernen, wie man Events nutzt und zu erkennen, dass Events manuell ausgelöst werden können. Das Verständnis von OO in JS war auch ein großer Schritt.
Als ich erkannte, dass ich die Firebug/Chrome/IE-Konsole verwenden konnte, um jeden Code oder jede Funktion schnell zu testen.
– Wenn ich mich nicht erinnere, wie diese Funktion funktioniert, teste ich sie in der Konsole.
– Wenn ich mir über die Syntax nicht sicher bin, teste ich sie in der Konsole.
– Wenn ich nicht weiß, ob dieses Stück Code funktionieren wird, teste ich es in der Konsole.
;)
…als ich herausfand, dass „Alles ist ein Objekt“ nur die halbe Wahrheit ist.
– der Interpreter ist eine große, ereignisbasierte Eval-Schleife und aus seiner Sicht ist alles eine Funktion.
innerhalb von JS ist „eval ist böse“, aber
var f = new Function () { ... };ist FTW,dasselbe mit
var obj = new function() { ... }‚new Function () { … }‘ funktioniert nicht. Es wäre ‚new Function (” …”)‘, aber das ist nur ein Alias für eval. Sie haben die gleichen Probleme mit new Function wie mit eval. Aber Sie können eval-freie Funktionen erstellen, die ziemlich leicht tun, was Sie wollen.
(Einrückung scheint nicht erhalten zu werden…)
Das andere ist eine interessante Art, einen Einmal-Konstruktor zu verwenden, die ich noch nicht gesehen habe. Das werde ich meiner Liste nützlicher Muster hinzufügen.
@Havvy: ja, Sie haben Recht. Es sollte
new Function ("...")sein. Entschuldigung dafür.aber es ist weit mehr als ein Alias für
eval().eval() instanziiert und führt in einem Schritt aus, ohne oder mit wenig Möglichkeit, schlechte Dinge passieren zu lassen.
Mit einem gekapselten try/catch innerhalb des „create Function“-Blocks können Sie die neue Funktion überprüfen, bevor Sie sie an den aufrufenden Kontext zurückgeben.
Das Aufrufen oder Binden an einen neuen Kontext ist ein völlig anderer Schritt :-)
Der
var obj = new function() {...}-Konstruktor funktioniert fast genauso wie eine Closure oder eine sofort aufgerufene Funktion, hat aber einige Vorteile (zumindest meiner Meinung nach).Er erlaubt private Variablen und Funktionen innerhalb des erstellten Objekts wie die anderen,
aber der Zugriff auf Variablen aus seinem aufrufenden Bereich ist viel vorhersagbarer (dasselbe mit
this)Dies ist nützlich, wenn Sie verrückte Dinge tun, wie das Verschachteln dieser Art von Konstruktoren und trotzdem Zugriff auf die Variablen seines Basis-Aufrufer-Bereichs haben.
Auf diese Weise können Sie private, klassenübergreifende, geschützte und öffentliche (aus Sicht der Basisklasse) Variablen auf einfache Weise haben.
aber das ist weit jenseits von Klick-Finde-Tu-DOM-Zeug...
Ich hatte einige „Aha!“-Momente mit js, aber einer der größten war das Verständnis von PHP-Hooks, die im Grunde sehr ähnlich zu JS-Callbacks sind.
Mein Aha-Moment war, als ich erkannte, dass ich objektorientierte JavaScript-Apps machen kann. Das gab mir viel mehr Möglichkeiten, die Kraft von JavaScript zu sehen. Je tiefer man eintaucht, desto mehr will man erleben.
Mein JavaScript Aha!-Moment war, als ich erkannte, wie Scopes funktionieren.
Meins war, als ich erkannte, dass HTML-Elemente nur das sind (Elemente) und dass jQuery diese Elemente finden und beeinflussen kann, wie immer ich will. Wie oben gesagt, „finde dies, tue das“. Habe nicht viele Verwendungsmöglichkeiten für JS jenseits der Manipulation des DOMs gefunden, aber ich bin sicher, dass es irgendwann auftauchen wird und ich einen weiteren Aha-Moment haben werde.
Als Douglas Crockford die nachgestellten Klammern einer sofort aufgerufenen Funktion „dog balls“ nannte.
https://#/hK3QZB5r
Ha ha ha! Urkomisch! Ich liebe es, wie Douglas Crockford ein trockenes Thema wie Programmierung präsentieren und gerade genug Humor einstreuen kann, um das Publikum bei der Stange zu halten.
Ich habe diese Präsentation gesehen und stimme Mr. Crockford hier (und nicht nur hier) nicht zu.
Er sagt, der Grund, warum er Klammern außerhalb der Invocation setzt, ist, dass die gesamte Invocation wichtig ist, nicht nur die Funktion.
Aber diese Klammern sind nicht da, um zu zeigen, was wichtig ist. Sie sind da, um sicherzustellen, dass es sich um einen **Funktionsausdruck** im Gegensatz zu einer Funktionsanweisung handelt. Eine Invocation ist immer ein Ausdruck, also gibt es keinen Grund, ihn in Klammern zu setzen, und damit zu zeigen, dass es ein Ausdruck ist. Es verwirrt nur die Köpfe ;)
Am Ende hilft die Erklärung dieser Situation, wie Mr. Crockford es tut, nicht dabei zu verstehen, was wirklich in dieser Sprache vor sich geht.
Für mich hieß der JavaScript „Ah ha!“-Moment einfach JQuery. Auch wenn es ziemlich falsch ist, es so zu nennen, denn JQuery zu kennen, kann einen denken lassen, man könne JavaScript schreiben, aber das könnte nicht weiter von der Wahrheit entfernt sein.
JQuery macht es einfach unglaublich zugänglich, indem es CSS-Selektoren und praktische Methoden wie slideUp/slideDown verwendet. Das in nativem JavaScript zu schreiben, wäre eine Qual und die meisten JQuery-Entwickler wüssten nicht einmal, wo sie anfangen sollten.
Da JQuery Bestand hat, ist das eigentlich kein Problem. Solange wir nicht über JavaScript-Performance (und Mobilgeräte) sprechen.
@bigbossSNK Hahaha, ich habe mir den Bauch gehalten, als ich das sah! #dogballs
Meins war der Moment, als ich existierte.
Das ist genau das, was ich jedes Mal erkläre, wenn Leute mich fragen, wie ich Webdesign gelernt habe! Es ist dieser eine Moment, in dem man plötzlich sieht, wie alles funktioniert, und dann wird alles so viel einfacher. Ich habe tatsächlich die meiste Programmierung selbst gelernt, indem ich einfache Dinge wie das Abrufen einer Anfrage in PHP gegoogelt habe (was übrigens mein **Aha**-Moment war) und dann kannte ich die Sprache nach einer Weile einfach.
Ich habe mehrere Artikel über Closures gelesen, hatte aber Schwierigkeiten, das Konzept zu verstehen. Als ich las, dass es nur darum geht, eine Funktion in den globalen Namespace zurückzugeben, war das mein Aha-Moment!
Als ich erkannte, dass JavaScript nichts mit Java zu tun hat
Ich denke, ich hatte in den letzten Jahren ein paar, aber auf den ich mich am meisten freue, ist einer, der noch nicht stattgefunden hat – MVC in JavaScript zu verstehen.
Ich habe ein Projekt, in dem die meisten meiner früheren Aha-Momente aufgetaucht sind, daher freue ich mich darauf, einige Zeit damit zu verbringen, es mit MVC-Konzepten neu aufzubauen.
Für mich war dieser Moment, als ich von der automatischen Semikolon-Einfügung erfuhr
Douglas Crockford hatte richtig vorgeschlagen, die schließende geschweifte Klammer auf derselben Zeile statt auf einer neuen Zeile zu haben.
Ich habe mit jQuery angefangen (http://sarfraznawaz.wordpress.com/2012/02/12/learning-javascript/), aber seitdem ich angefangen habe, JavaScript ernsthaft zu betrachten, habe ich mich darin verliebt und mehr als einen Aha-Moment erlebt :)
Zu Ihrer Information, hier sind andere Stellen, an denen automatische Semikolon-Einfügung stattfindet
var Aussage
leere Aussage
Ausdrucksanweisung
do-while-Anweisung
continue-Anweisung
break-Anweisung
throw-Anweisung
Scope in Closures funktioniert genau so, wie man es erwarten würde, wenn man all den Unsinn vergisst, den objektorientierte Sprachen einem eingetrichtert haben. Das hat mich auch bei C# besser gemacht, da ich Lambdas wirklich verstanden habe.
$.extend
Der Captain-Obvious-Post zum Erstellen von JavaScript-Funktionen, die andere Funktionen zurückgeben.
Das Erlernen eines kleinen Teils Prolog und das Verständnis, wie mit der booleschen Typumwandlung && und || nahe Verwandte des Semikolons sind.
DOM-Events blubbern hoch
Wow, ich glaube, ich habe meine persönlichen JS-Aha-Momente vergessen, aber ich werde ein paar Grundlagen versuchen
1. DOM-Sachen (window, document, onclick etc.) sind nicht wirklich JavaScript, sondern Dinge, die dem JavaScript vom Browser zur Verfügung gestellt werden. Dort liegen 99% der Cross-Browser-Probleme mit JavaScript, außerhalb des DOM ist es im Vergleich dazu einfaches Segeln, was die Cross-Browser-Kompatibilität angeht.
2. In einem Browser ist alles im window-Objekt, also
Kann aufgerufen werden durch
oder
3. Punktnotation ist austauschbar mit Klammernotation, daher kann man auch
und somit über eine Variable
4. ‚in‘ ist nicht nur für in einer for-Schleife, man kann es auch als Test verwenden
5. || und && geben nicht true oder false zurück, sie geben den zuletzt ausgewerteten Operanden zurück.
6. DOM-Sammlungen sind keine Array-Objekte (sie sind ja keine JavaScript, erinnern Sie sich?), und getElementsBy…() gibt eine Live-Sammlung zurück. Zum Beispiel, wenn Sie .length referenzieren, wird getElementsBy…() erneut ausgewertet, um die Länge neu zu berechnen. Wenn Sie also Folgendes tun, erhalten Sie eine Endlosschleife
Pfft, das ist alles, was mir im Moment einfällt, ohne zu fortgeschritten zu werden.
Ich bin ein ziemlich Hardcore-Softwareentwickler… ich habe sicherheitskritische Software für Flugzeuge und U-Boote geschrieben. Und ich habe immer noch meinen JS-„Aha!“-Moment zu erleben. Aber ich weiß, wie er sein wird: wenn ich die verdammten Scoping-Regeln verstehe.
Ich bin es wohl einfach nicht gewohnt, eine so locker typisierte und ereignisgesteuerte Sprache zu verwenden und verstehe nicht, was im und außerhalb des Geltungsbereichs liegt, besonders wenn man Funktionen als Daten an Ereignisse weitergibt.
Ich habe mich auch davon ferngehalten, große Apps in JavaScript zu schreiben, daher hatte ich nie einen Grund, mich mit den Feinheiten von Scope und Closures zu beschäftigen.
Eines Tages.
Ich bevorzuge es, wenn meine U-Boot-Software-Schreiber etwas „besseres“ und leckeres verwenden.
:)
Ich glaube, Sie haben mir gerade meinen gegeben, als Sie ihn beschrieben haben als: eine
„Finde etwas, tue etwas“-Bibliothek
Danke! (Ich werde wahrscheinlich trotzdem jemand anderen schreiben lassen, ich mag CSS gut genug.)
Als ich erkannte, dass es tatsächlich eine echte, formelle und komplexe Sprache war und nicht nur dieses hässliche kleine Skriptding, das in Browserclients lief (wie ich es die ersten paar Jahre als Webentwickler betrachtet hatte).
Für mich war es, dass JS
prototypisch
ereignisbasiert war (was mit… großartig war
Closures hatte
das mir endlich das AHA gab
Oh, und First-Class-Funktionen hatte
Meins war, als ich lernte, dass Strg+F5 JavaScript in einem Browser aktualisiert. Sicher, das war vor langer Zeit.
Mein „Aha-Moment“ in JavaScript war, als ich erkannte, dass alles in JavaScript Objekte sind (ich weiß, das klingt albern…), ähnlich wie CSS viele Boxen mit kleineren Boxen darin…
jQuery ist eine WOW-Bibliothek, nur weil sie Entwicklern hilft, eine neue Denkweise über JavaScript zu entwickeln. Alle anderen Funktionen sind großartig, aber sie sind nicht das einzigartige Merkmal, das sie zu WOW macht!!!
Vor ein oder zwei Monaten, bis dahin stolperte ich nur durch.
Es ist vorbei, html -> css -> php -> Javascript -> Jquery
Ich glaube, ich bin nah am „Aha“-Moment, aber ich stöbere und passe immer noch Open-Source-Lösungen an. Ich liebe jQuery!
Funktionales/logisches Programmieren; Closures; Objekte, Objekte überall.
Ich liebe es, wie sich die „Aha!“-Momente in JavaScript dazu neigen, sich gegenseitig zu entkräften.
„Aha! *So* zwingt man es, X statt Y zu tun!“
„Aha! Y ist tatsächlich viel besser als X!“
Ich schätze, der größte Aha-Moment war das Ansehen der Crockford-Videos und die Erkenntnis, dass es nicht kaputt ist, sondern nur unkonventionell, und wenn man mit der Sprache kämpft, gibt es wahrscheinlich einen besseren Weg, Dinge zu tun.
Mann, ich hatte letztes Wochenende diesen jQuery-Buch-Aha-Moment auf einem Flug! Tolles Gefühl. Ich weiß nicht, warum ich so zögerlich war, damit anzufangen...
Ich mochte es wirklich, wirklich, als ich meine eigene Funktion sah, genau wie die eingebauten JS-Funktionen, die die `prototype`-Eigenschaft nutzten.
Und ich war wirklich glücklich zu erfahren, dass ich nichts auf meinem System installieren muss, damit JSON funktioniert!! LOL
Für mich war es das Lesen von
DOM Scripting: Web Design with JavaScript and the Document Object Model
von Jeremy Keith
Ich empfehle dieses Buch immer noch jedem, der gerade mit JavaScript anfängt.
Ich stimme zu – ein tolles Buch für den Einstieg, und Jeremy hat eine fantastische Art, Dinge verständlich zu machen, besonders wenn man eher aus dem Designbereich kommt :)
Irgendwie unterschiedliche „Aha!“-Momente in verschiedenen Phasen. Mein erster war sehr ähnlich wie der von Chris, nur dass ich anstatt ein Buch zu lesen, blind ein Plugin benutzte, das nicht ganz das tat, was ich wollte. Ich beschloss, mir den Code anzusehen, und da es jQuery war (das CSS-ähnliche Selektoren verwendete), war es ziemlich intuitiv. Alles, was ich tun musste, war zu ändern, wo das Plugin eine bestimmte ID erwartete, damit es eine bestimmte Klasse erwartete, und es funktionierte. Ich konnte ändern, was gefunden wurde, und ich konnte damit verschiedene Dinge bewirken. Aha!
Fast zur gleichen Zeit wurde klar, wie man Werte und Objekte weitergibt. Ein paar Tage lang dachte ich ehrlich, als ich in Beispielcode eine Funktion wie `function(foo, bar)` sah, dass die Namen ‚foo‘ und ‚bar‘ eine besondere Bedeutung hatten und ich herausfinden musste, welche gültigen Werte dort eingegeben werden konnten. ;-) Es dauerte nicht lange, bis ich mir an die Stirn schlug, aber es hat mich anfangs völlig verwirrt, da ich überhaupt keine Entwicklungserfahrung hatte.
Andere Lernerfolge waren inkrementell. Ich begann, ‚Vanilla‘-JavaScript einzubauen, als ich es lernte und wann immer es angemessen war (zum Beispiel `this.id` vs. `$(this).attr(‘id’)`), und ich verstand, wie man Timing-Probleme behebt und Race Conditions löst.
Und dann, als ich tatsächlich versuchte, ein anderes Problem zu lösen (Anwendungs-Namespaces, um den globalen Namespace nicht zu verunreinigen), habe ich Objekte wirklich endlich verstanden. Das war also wirklich der zweite „Aha!“-Moment. Seitdem befinde ich mich in einer weiteren inkrementellen Lernphase, aber ich bin sicher, dass ein weiterer Aha-Moment nicht weit ist.
Scope (Geltungsbereich).
1) DOM
2) Anonyme Funktionen
3) Coffeescript
– Anonyme Funktionen
– Alles ist ein Objekt
– Funktions-Scope
– Closures
– Selbsteinführende Funktionen
Die Erkenntnis, dass es nur um das DOM ging, um den Zugriff auf seine Elemente und deren Manipulation in irgendeiner Weise, sei es das Ändern des Aussehens von etwas, das Hinzufügen oder Entfernen eines Elements. Von da an vereinfacht sich alles zu einer Frage der Ermittlung der Elemente, mit denen ich arbeiten möchte, wie ihr endgültiger Zustand sein soll und was ich damit tun möchte und wie ich es tun soll. Einfach.
Meine Erkenntnis war das Verständnis der Verwendung des Schlüsselworts ‚var‘ in JavaScript, Variable Hoisting, Scope & Prototypische Vererbung.
Die Entdeckung, dass null, undefined, 0, false (natürlich) und “” alle „false-y“ sind und
if (!foo) { // foo is falsey }ausreicht, um eine „false-y“-Variable zu testen! \o/
Eine fortlaufende Kette von Offenbarungen
– Sicher, das Alles-ist-ein-Objekt-Konzept
– Kurzform der Objekterklärung und -instanziierung durch Verwendung von Klammern
– Umgehung der Same-Domain-Policy durch Verwendung von JSON/JSONP
Ein Favorit, obwohl keine „Jetzt verstehe ich“-Erfahrung, war die Tatsache, dass man XmlHttpRequest komplett umgehen kann, indem man das src-Attribut eines bekannten Script-Objekts wiederverwendet. Alles kann von überall abgerufen werden, solange man es als JS kodieren kann. Endlich wurde meine Feedreader-Web-App möglich. Ich lese gerade diesen Blog darüber...
Mein JavaScript-Aha-Moment war jQuery
Es war, als ich herausfand, wie Variablen-Scopes in JavaScript funktionieren. Wie wenn man eine Variable setzt und dann eine Closure, und dann, wann immer diese Closure aufgerufen wird, hat sie Zugriff auf diese Variable.
als ich erkannte, dass man Argumente an Funktionen übergeben konnte
</code>.
als ich erkannte, dass
Funktionen auch Objekte sind…..
Genauso wie du, Chris, die Entdeckung von jQuery und all seinen Kräften und Fähigkeiten. Davor war JS ein Mysterium, danach wurde es zugänglich. Jetzt lerne ich immer mehr „Core“-JS. :)
Die Macht von jQuery ließ mich „Juhu!“ schreien, als ich die Hintergrundfarbe meines gesamten Formular-DIVs ändern wollte, wenn ich eines der Eingabefelder fokussierte, und ich versuchte, das mit CSS zu machen (geht nicht), da ich mehr als ein Formular auf der Seite hatte. Also benutzte ich
$(this).parents().eq(3).css('background','#608CC4');da das DIV, dessen Farbe ich ändern wollte, das 3. Elternteil des „this“-Inputs war. Ich warte immer noch auf eine reine CSS-Lösung dafür.
Ich warte immer noch darauf. Ich kann die Art von Objektorientierung, die in JavaScript stattfindet, immer noch nicht ganz begreifen. Ich habe keine Probleme mit Java, Python, PHP oder sogar Lua-Stil OO, aber JS bringt mich einfach um den Verstand.
Ich fühlte mich absolut gleich, bis ich Stefanovs Buch las (ich mag Crockford, aber er lässt es immer so klingen, als gäbe es in JS ein verstecktes Genie).
Mein Aha dort war, dass die Objektorientierung in JS irgendwie Ihnen überlassen ist. Es ist nur eine Implementierungssache, die Sie verwenden können, um OO-ähnliche Effekte zu erzielen. Wenn Sie aus Sprachen mit Zeigern kommen, denken Sie an JS-Objekte als Strukturen, die immer mit drei Zeigern geliefert werden: Konstruktor, Prototyp und __proto__. Nun, wenn Sie neue Instanzen erstellen, zeigen Sie diese Zeiger auf verschiedene Stellen und Sie erhalten unterschiedliche Arten von „Vererbung“. Ein sehr mächtiger und flexibler Mechanismus – keine Frage – aber auch sehr leicht zu vermasseln. Und all dies könnte ohne die nativen, angeblich OO-Elemente der Sprache geschehen. Ich liebe es, wie selbst für die prototypische Vererbung (die in JS nativ sein soll) Crockford immer einen aktuell bevorzugten Weg hat, sie zu **implementieren** – http://javascript.crockford.com/prototypal.html. Oder das einzige andere native OO-Ding dort – der „new“-Operator, der von einigen als schädlich angesehen wird – http://stackoverflow.com/questions/383402/is-javascript-s-new-keyword-considered-harmful? Andererseits hat dies teilweise wunderschöne Dinge wie jQuery möglich gemacht...
Verstehen, wie Informationsverbergung mithilfe von Funktions-Scopes erreicht werden kann.
Ich habe die Bedeutung von JS und jQuery bei der Anpassung des Audio-Players von Iphonelu und meiner täglichen Routine entdeckt, indem ich On-Click-Events für Dropdown-Menüs auf den kostenlosen mobilen Website-Vorlagen von Mobifreak hinzugefügt habe.
Wie andere hier schon erwähnt haben, war es für mich, Crockford zu beobachten und zu lesen. Als ich die Geschichte/den Hintergrund der Sprache las, ergab alles viel mehr Sinn – ich fühlte mich nicht mehr frustriert und verwirrt, wie ich es durch das Hacking der Sprache mit einer Java/C-Mentalität gewesen war.
Er erklärt: „Die C-ähnliche Syntax von JavaScript… lässt es wie eine gewöhnliche prozedurale Sprache erscheinen. Das ist irreführend, denn JavaScript hat mehr mit funktionalen Sprachen wie Lisp oder Scheme gemeinsam als mit C oder Java.“
Anscheinend wurde die Sprache JavaScript zu Marketingzwecken so genannt, da Java damals „in“ war. Eine furchtbar verwirrende Namenswahl!
Wo wir gerade von JavaScript sprechen, ich bekomme einen JS-Fehler, wenn ich diese Website in IE7 aufrufe. Ich glaube, Sie haben dort irgendwo ein Komma vergessen oder zu viel eingefügt.
Mein größter JavaScript „Aha-Moment“ war, als ich herausfand, dass man Funktionen in AJAX-Callbacks definieren muss, damit der neu geladene Inhalt auf Ihre Funktionen zugreifen kann.
Mein „Aha!“-Moment war der Tag, an dem mir ein Freund von einem neuen Framework erzählte, das sich in Entwicklung befand und jQuery hieß.
Ich habe meinen ‚Aha‘-Moment für JavaScript noch nicht erlebt, aber in eine ähnliche Richtung geht mein ‚Aha‘-Moment für objektorientiertes Design im Allgemeinen. Ich habe mir den ganzen Abend den Kopf zerbrochen, um einen Code zum Laufen zu bringen, und bin dann ins Bett gegangen. Ich wachte mitten in der Nacht auf und dachte mir… „Moment! Ich verstehe es!“. Mir wurde klar, dass ich mich mit einer Art Mischmasch aus prozeduralem OOP-Spaghetti-Chaos durch meinen Code geschlagen hatte. Plötzlich verstand ich das ganze Konzept, ein Objekt einmal zu erstellen und es überall auf der Website oder auf meinen Websites zu verwenden. Ich wusste, was es bedeutet, eine in sich geschlossene Klasse zu schreiben, die überall dort verwendet werden konnte, wo ich sie brauchte, über all meine Projekte hinweg. Es war wie ein Paradigmenwechsel für mich. Es war ein cooles Gefühl.
Ich hatte meinen „Aha!“-Moment, als mir klar wurde, dass ich jQuery kann, aber kein reines JavaScript. Und ich bin mir immer noch nicht sicher, ob das gut oder schlecht ist – aber es funktioniert für mich.
Ich bin genau umgekehrt. Ich kenne mich mit jQuery aus, aber wenn ein Kunde es nicht verlangt, würde ich reines JavaScript einer Bibliothek jederzeit vorziehen.
Ja, ich kenne die Risiken (hauptsächlich Browserinkonsistenzen), aber ich habe noch keine anständige Bibliothek gesehen, die tatsächlich dazu anregt, JavaScript so zu verwenden, wie es gedacht ist. Mein Problem damit liegt mehr an der dahinterstehenden Mentalität als an den Frameworks selbst.
JavaScript sollte nicht für Animationen oder Styling verwendet werden; man sollte CSS verwenden. Es sollte nicht für die Generierung von Inhalten oder das Laden von Skripten verwendet werden; man sollte dafür eine serverseitige Sprache oder einfach HTML verwenden. Am wichtigsten ist, dass eine Website nicht von JavaScript abhängig sein sollte, um zu funktionieren (außer in Sonderfällen wie Gmail oder etwas Ähnlichem).
Am schlimmsten ist, obwohl die Frameworks selbst selten sehr groß sind, kann die Abhängigkeit von ihnen eine Website schnell aufblähen. Die „Mobile Site“ unseres Unternehmens musste über ein Megabyte an JS-Bibliotheken laden, nur um zu funktionieren, und ihre wahrgenommene Ladezeit war dreimal länger als die der Desktop-Website.
Ich denke, was ich sage, ist, dass es gut ist, die Grundlagen zu kennen, wenn möglich.
Ich habe eine sehr kleine und einfache jQuery-Truncate-Funktion geschrieben (http://martoosterveld.nl/blogdetail.php?id=27). Das war mein Aha-Moment; von da an begann ich, immer besser in JS und jQuery zu werden. Ich habe immer noch viel zu lernen, aber das war definitiv der Anfang einer guten JS-Karriere für mich :)
Zuerst, als ich erkannte, dass es zwei Möglichkeiten gibt, auf Objekteigenschaften zuzugreifen.
Dann, als mir klar wurde, dass die zweite Art nicht einmal einen String verwenden muss.
oder vielleicht
oder sogar
Seien Sie vorsichtig, das Objekt, das Sie innerhalb der Klammern verwenden, wird anhand seiner String-Repräsentation indiziert (toString() wird aufgerufen), sodass, wenn diese „object Object“ ergibt und Sie sich dessen nicht bewusst sind, es zu einigen unerwarteten Kollisionen kommen kann.
Hm, das ist interessant, das wusste ich nicht, danke :)
Als ich entdeckte, dass `getElementsByTagName` eine Live-Collection ist.
http://devign.me/getelementsbytagname-is-always-up-to-date-according-to-the-current-dom-tree/
Für mich war es der Moment, als ich entdeckte, dass ich JavaScript in der Firebug-Konsole mit `debugger;` debuggen kann.
Guter Beitrag! Hier sind einige Tipps, wie man sich im Bereich Webdesign weiterentwickeln kann: Webdesign
1. Bleiben Sie durch Design-Blogs über Neuigkeiten auf dem Laufenden oder lernen Sie vielleicht eine neue Websprache.
2. Es gibt viele fantastische Bücher und Zeitschriften für Webdesign, die eine breite Palette von Themen mit zunehmender Tiefe als Lernquelle abdecken.
3. Web-Ressourcen wie Six Revisions sind großartig, um neue Techniken zu lernen.
4. Denken Sie daran, alles, was Sie lernen, über eine Drittanbieter-Ressource zu überprüfen. Es gibt eine Menge veralteter Informationen da draußen (wie W3Schools), die diese schlechten Gewohnheiten loswerden könnten.
5. Seiten beginnen, Unterricht im Klassenzimmer-Stil und Video-basierte Unterrichtskurse (z. B. Lynda.com) zu Webdesign und -entwicklung anzubieten. Sie können teuer werden, aber sie werden die beste Investition für Ihre Zukunft sein.
Aha! Zahlen, Boolesche Werte, Strings usw.
Aha! Wenn Else
Aha! Für / Während Schleifen
Aha! Funktionen, Objekte, Methoden
Bis ich die ganze Grammatik dieser Sprache kenne, wird es noch ein paar Aha-Momente geben. Für mich werden die wichtigsten Aha-Momente sein, wenn ich erkenne, was ich mit dem DOM machen kann. Für mich, da ich keine echten Computerprogramme schreibe, wird am wichtigsten sein, was ich mit JS mit meinem Webdesign machen kann. Um diese Dinge auf die beste, sauberste und leichteste Weise zu tun, denke ich, ist es für jeden wichtig, zu wissen, wie reines JS funktioniert.
Eine wirklich gute Quelle, um JavaScript zu lernen, ist Codecademy, das ich gerade benutze. Für mich gab es noch nie einen einfacheren Weg, eine webbezogene Technologie zu lernen, daher kann ich sie jedem wärmstens empfehlen.
Dieser Thread entwickelt sich zu einem hervorragenden Werkzeug zum Erstellen einer Leseliste für jQuery/zukünftige Plain-JavaScript-Entwickler. Die wiederkehrenden Themen, die von fortgeschrittenen JavaScript-Entwicklern genannt werden, die sie auf die nächste Stufe brachten, inspirieren mich wirklich zu lernen und geben mir eine großartige Richtung, in der ich dies tun kann.
Der Moment, als mir der Unterschied zwischen `this` und `$(this)` klar wurde.
Ich würde nicht behaupten, ein „anständiges Verständnis“ von JavaScript zu haben, oder irgendetwas anderes, aber eine Reihe von Vorträgen von Douglas Crockford zu sehen, hat mir den Kopf verdreht. Während mein Code immer noch ein albernes Durcheinander ist, weiß ich zumindest jetzt, was daran schlecht ist (zumindest zu einem gewissen Grad), und was noch wichtiger ist, ich kann mir jetzt Dinge ausdenken und sie in irgendeiner Form zum Laufen bringen, ohne viel Mühe – anstatt im besten Fall Kopierpaste zu modifizieren, ohne viel Ahnung zu haben, wie und warum es funktioniert, und im schlimmsten Fall einfach passen zu müssen.
http://yuiblog.com/crockford/
^ sie sind auch auf YouTube. Wenn Sie wie ich sind, haben Sie vielleicht eine fieberhafte Reaktion darauf: Sie können nicht aufhören zuzusehen und verspüren den Drang, das Gehörte in die Praxis umzusetzen, was ein bisschen so ist, als müsste man gleichzeitig niesen und pinkeln. Der beste Gehirnschmerz aller Zeiten! Persönlich freue ich mich darauf, sie alle irgendwann wieder anzusehen und tatsächlich einigermaßen folgen zu können, das wird auch großartig sein.
Ich hoffe, das hat jemandem geholfen, und danke Crockford auf jeden Fall.
Mein Aha-Moment war das Aufgreifen von jQuery. Ich schätze, man könnte sagen, ich warte immer noch…
Als ich eine Alert-basierte Validierung verwendete und mein Chef mir sagte, ich solle eine bessere und stilvollere Validierung verwenden, und sie funktionierte beim ersten Mal.
Nun, das ist nicht wirklich ein Aha-Moment, also warte ich immer noch.
Größter Aha-Moment bisher – wir sind daran gebunden… (also besser lernen)
Mein Aha-Moment war definitiv, als ich das Konzept von „this“ begriff, sowohl in JavaScript als auch in PHP! Es ist ein so einfaches Konzept, aber es kann am Anfang so schwer zu verstehen sein. Sobald ich das drauf hatte, wurde mein Programmierleben um ein Vielfaches einfacher.
Ich bin nichts Professionelles oder Ähnliches, aber ich würde sagen, dieser Moment kam, als ich nach wochenlanger Suche herausfand, wie man Daten von anderen Seiten mithilfe von JavaScript/jQuery anzeigt.
Mein Aha-Moment war, als ich die Macht und Einfachheit von „truthy“ und „falsey“ Ausdrücken in JS lernte. Kein „if (x == “” || x ==0 || typeof x == “undefined”)“ mehr, jetzt kann ich einfach „if (x)]“ machen #booyah
jQuery Aha!
– Chaining und Callback-Funktionen.
JavaScript Aha!
– Wie Objekte funktionieren und wie man sie benutzt.
– Was das DOM ist und wie genau es funktioniert
Ich warte immer noch auf einen Aha-Moment. Ich lese Tutorials, schaue Videos, aber ich kann mich immer noch nicht in jQuery einfinden. Ich meine, ich kann einfache Dinge tun wie ausblenden und herunterklappen, aber darüber hinaus komme ich nicht weiter. Ich weiß nicht, was es ist… ich weiß nicht einmal, was ein Objekt ist! UGH. Traurigkeit.
Ich stecke hier im selben Problem, Kumpel. Ich kann kleine Dinge wie Schieben, Verbergen usw. managen, aber nichts anderes, und ich bin verzweifelt darauf aus, diesen Aha-Moment zu erleben. Ich schaue mir Video-Tutorials an, lese Bücher, habe Codecademy ausprobiert, aber nichts scheint bei mir zu klicken ((( Ich habe nach Vorschlägen gefragt, aber niemand hat geantwortet. Bitte, wenn jemand einen Shortcut oder Tipp, einen Hinweis, ein Tutorial hat, bitte posten...
Leo,
Hast du versucht, dich mit anderen zu treffen und in einer Gruppenumgebung zu lernen?
Mir hat geholfen, dass ich mich entschieden habe, einen Kurs an einer Schule zu belegen, um die grundlegenden Grundlagen zu lernen, was mir wirklich geholfen hat, besser zu verstehen, was vor sich geht.
Davor hatte ich alles versucht, was du beschrieben hast, und nichts hat geklappt. Ich denke, es kommt darauf an, sich selbst und seine Lernweise zu kennen.
Ich habe noch einen langen Weg vor mir mit vielen schlaflosen Nächten, aber ich lege ein gutes Fundament.
Erstaunliche Ähnlichkeit bei all diesen Momenten, als der „Cent fiel“. Für mich war es genau dasselbe, ich lernte ziemlich früh, dass alles ein Objekt war...
Und dann denkst du, du hast es drauf, du fängst an, Dinge rauszuhauen, und zack! Namespace-Konflikte mit Plugins oder anderen Code-Schnipseln – und du bist wieder demütig... du lernst Namespacing und Closures und so Zeug...
Und dann ‚this‘ – du denkst, was zum Teufel ist ‚this‘, oh Weh, Mann, hat es mich ewig gekostet, das zu ‚verstehen‘, oder ist es ‚versteh das‘ oder vielleicht versteh ‚dies‘, eines ist sicher, wenn du das verstehst, dann hast du es.
Ich bin immer noch dabei, JS zu „verstehen“, aber für mich waren die größten „Aha!“-Momente, als ich herausfand, wie if/else-Anweisungen funktionieren (genau wie bei PHP!), wie man `console.log()` benutzt und dass JS im Wesentlichen nur Variablen und Funktionen sind – in dieser Reihenfolge.
Ich arbeite auf meinen nächsten Aha-Moment hin, indem ich mich mit Kapselung beschäftige :)
Für mich ist es, als ich phpjs.org gefunden habe.
Alle PHP-Funktionen, die in JavaScript konvertiert wurden….
Ich denke, Chris' Erklärung von jQuery hat mir gerade meinen jQuery-Aha-Moment beschert.
Mein Aha-Moment war das `prototype` in JavaScript. Ich kannte das „alles ist ein Objekt“ bereits aus meinen Ruby-Erkundungen, also machte das Sinn – es war das Fehlen von Klassen, das JavaScript in meinem Kopf wirklich kaputt machte. Dann las ich „JavaScript: The Good Parts“ und er bringt die prototypische Natur von JavaScript auf den Punkt.
Da machte es bei mir Klick (ich las zu der Zeit auch über Evolutionstheorie) und ich verband Prototyp mit „letzter gemeinsamer Vorfahre“ und es machte wirklich Klick: Erweitere eine Klasse, indem du das Prototyp-Objekt in der Kette findest, das die Erweiterung tragen sollte, und divergiere von dort aus.
Wirklich, ganz JavaScript: TGP ist ein einziger großer „Oh, SO macht man das“-Moment.
Objekt-Scopes, „wissen, worauf *dies* sich jederzeit bezieht“, und das DOM-Ereignissystem, „lernen, dass man #addEventListener verwenden kann“.
Ich benutze jetzt sowieso CoffeeScript, es vereinfacht alles wirklich.
In CoffeeScript wird etwas wie das hier...
Zu diesem...
Und das Erstaunlichste, etwas wie das hier...
Kann so geschrieben werden...
Prototypische Vererbung ist wahrscheinlich eines der härtesten Konzepte, die ich begreifen musste, aber sobald mir klar wurde, wie dieses Paradigma funktioniert. Ich wollte immer, dass JavaScript sauber und klassenbasiert ist, aber die Prototypenkette war eine neue Sicht auf die Programmierung.
Entdeckung von jQuery, um diesem Chaos zu entkommen.
Ich habe lange angefangen, JavaScript zu lernen, es ist über 10 Jahre her, lange bevor ich meine erste Internetverbindung hatte. Der Inhalt, aus dem ich lernte, war ein einfaches JavaScript-Web-Tutorial, auf einer Diskette komprimiert, und ein Tutorial in einer Computerzeitschrift. Deshalb habe ich die Sprache meistens selbst entdeckt, so gab es viele Aha!-Momente.
Mein Code war damals ein totales Durcheinander (Leerzeichen und neue Zeilen? Wer braucht das! Je mehr Code auf Ihren Bildschirm passt, desto besser), aber seltsamerweise wusste ich genau, was damit los war.
Ich habe keine `var`-Anweisungen verwendet, weil ich keinen Unterschied zwischen ihr und der einfachen Verwendung einer Variablen sah. Später entdeckte ich, dass die Attribute in Funktionen die seltsame Fähigkeit haben, außerhalb der Funktion nicht sichtbar zu sein. Also begann ich, sie so zu verwenden
was mit meinem aktuellen Schreibstil so aussah
Dann habe ich `var` wieder versucht.
Es war wahrscheinlich mein größter Aha!-Moment.
Mein letzter Aha!-Moment ist über dieses Thema
Ja, der Kommentar ist ein bisschen TL;DR, aber ich hoffe, er hat Ihnen gefallen :)
Wie funktioniert `(object.method || function(){})(param);` nicht wie erwartet? Vielleicht war Ihre Erwartung falsch, aber das tut, was Sie ihm sagen. (obwohl es anonyme Funktionen zu bevorzugen scheint, die ein schlechter Ersatz für Funktionen sind, auf die mit Namen verwiesen werden kann).
Nun, wie Sie in der zweiten Zeile sehen können, war meine Erwartung an die Auswirkungen dieses Aufrufs anders. Vielleicht habe ich das nicht klar genug ausgedrückt, ich hätte schreiben sollen: „…wie von mir erwartet“.
Was meinen Sie mit „schlechter Ersatz“? Leistungsprobleme? Nun, die Leistung war dort nicht so wichtig, also habe ich es so geschrieben, dass es für mich leicht verständlich ist. Ich benutze oft Konstruktionen wie `(object.notSureIfThisPropertyWillExist || {}).foo`, also wollte ich etwas Ähnliches für Methoden verwenden. Vielleicht sollte ich eine global definierte Noop-Funktion verwenden, aber im Moment fühle ich keinen Bedarf dafür. Auf jeden Fall habe ich die dritte Option (die eigentlich die zweite ist) gewählt.
Aber zögern Sie nicht, meinen Code/Stil/Gewohnheiten zu kritisieren. Ich würde gerne mehr lernen und deshalb ein besserer Programmierer werden.
Prost.
Nun, nein. Ich meinte, die Anweisung `(x || y)()` bedeutet „rufe x auf, wenn es nicht da ist, rufe y auf“. In Ihrem Beispiel ist x eine Funktion eines Objekts, das Sie mehrmals aufrufen können (das ist der Sinn von öffentlichen Funktionen, richtig?), aber y ist es nicht. Dieses Problem wird normalerweise so angegangen: `if(!x) x = y;`, was bedeutet „wenn x nicht da ist, dann ist y x“. So funktionieren die meisten Shims.
Aber das ist kein Shim. Ich möchte diese nicht vorhandene Methode nicht durch eine Noop ersetzen.
Die Rolle dieses Ausdrucks war eher etwas Ähnliches wie ein `try`-Statement (oder `@` in PHP). Ein `try`-Statement, das als ziemlich langsam gilt und empfohlen wird, im obersten Scope verwendet zu werden (und ich habe es dort verwendet), war hier einfach nicht so notwendig, da ich Prüfungen mit `if` oder `||` oder `&&` durchführen kann.
Sie sagten
„In Ihrem Beispiel ist x eine Funktion eines Objekts, das Sie mehrmals aufrufen können (das ist der Sinn von öffentlichen Funktionen, richtig?), aber y ist es nicht.“
und genau das war mein Ziel. Die Noop dort sollte nicht aufgerufen werden. Sie war nur zur Vorsicht da, damit, wenn sie doch einmal aufgerufen wird, das Programm weiterläuft und keine „TypeError: undefined is not a function“ auslöst (besonders wenn der Code serverseitig ausgeführt wird, wie hier).
Ich hoffe, das klärt einige Dinge. Vielen Dank für Ihren Kommentar, ich schätze ihn sehr. Ich kann Ihnen versichern, dass ich, wenn Code oft ausgeführt wird, versuche, ihm einen gemütlichen Platz im Speicher zu finden :)
Prost.
PS: Ich habe mich verklickt und dieser Kommentar ist im Hauptthread gelandet. Bitte ignorieren Sie ihn. Entschuldigung ^_^
Oh, jetzt verstehe ich, wo die Verwirrung herkommen könnte. Ich habe ein verallgemeinertes Beispiel gezeigt
Ich wollte nur auf das Aufrufen einer Methode aufmerksam machen. In Wirklichkeit sah das etwas anders aus
Wenn man das aus einer anderen Perspektive betrachtet, mag es so aussehen, als ob ich etwas anderes versucht hätte.
Dennoch mag das immer noch verwirrend aussehen, warum ich überhaupt einen solchen Ansatz versucht habe. Aber glauben Sie mir, im Kontext passt es besser, als Sie denken.
Prost.
Ausgezeichneter Beitrag. Es ist unglaublich, wie viele Leute die gleichen Erfahrungen machen.
Auch ich hatte „Aha“-Momente. Mein erster war, als ich entdeckte, dass jQuery keine außerirdische Sprache ist und so einfach zu verstehen ist.
Aber das ist kein Shim. Ich möchte diese nicht vorhandene Methode nicht durch eine Noop ersetzen.
Die Rolle dieses Ausdrucks war eher etwas Ähnliches wie ein `try`-Statement (oder `@` in PHP). Ein `try`-Statement, das als ziemlich langsam gilt und empfohlen wird, im obersten Scope verwendet zu werden (und ich habe es dort verwendet), war hier einfach nicht so notwendig, da ich Prüfungen mit `if` oder `||` oder `&&` durchführen kann.
Sie sagten
und genau das war mein Ziel. Die Noop dort sollte nicht aufgerufen werden. Sie war nur zur Vorsicht da, damit, wenn sie doch einmal aufgerufen wird, das Programm weiterläuft und keine „TypeError: undefined is not a function“ auslöst (besonders wenn der Code serverseitig ausgeführt wird, wie hier).
Ich hoffe, das klärt einige Dinge. Vielen Dank für Ihren Kommentar, ich schätze ihn sehr. Ich kann Ihnen versichern, dass ich, wenn Code oft ausgeführt wird, versuche, ihm einen gemütlichen Platz im Speicher zu finden :)
Prost.
Der obige Kommentar war als Antwort gedacht, ich habe ihn oben gepostet, daher können Sie ihn ignorieren oder löschen (wenn Sie dazu in der Lage sind). Entschuldigung für die Unannehmlichkeiten, mein Fehler ^_^’
:) Das ist das erste Mal, dass Sie No-Op erwähnen!!! Ich habe Ihre leere Funktion nicht wörtlich genommen, ich dachte, sie dient der Kürze. Ja, ich sehe nichts Falsches an `if(x) x();` persönlich. Ich meine, verglichen mit `x && x()`, ist das nichts Nettes für andere Entwickler, die JavaScript nicht als ihre erste Sprache haben.
Mein Moment wäre, zu lernen, wie einfach es ist, asynchrone XML/HTTP-Anfragen zu stellen.
-----
var req = (window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject(“Microsoft.XMLHTTP”);
if(req == null) throw “Error!”;
req.onload = function() {console.log(“Success!”);}
try {
req.open(“POST”, address, true);
req.send(data);
} catch(e) {throw “Error!”;}
-----
Lange Zeit dachte ich, AJAX sei irgendein erstaunliches JavaScript-Ding, das fortgeschrittene Frameworks zur Implementierung benötigte.
Ich hatte auch einen weiteren (etwas beunruhigenden) „Aha“-Moment kurz darauf, als ich entdeckte, dass die meisten Bibliotheken, die „AJAX“ verwenden, dazu ermutigen, es zur Injektion von rohem HTML/JavaScript in Webseiten zu verwenden (Parse-Fehler und Sicherheitslücken im Überfluss!).
Meins war, als ich las, dass während OOP Verhaltensweisen (Methoden) zu Zuständen hinzufügt, der funktionale Ansatz von JavaScript genau das Gegenteil war: Zustände in Funktionen zulassen.
Der Moment, als ich versuchte, mein eigenes Akkordion-Skript zu erstellen, weil ich das in jQuery etwas schwierig einzurichten fand.
Und ich wusste noch nicht einmal, wie man JavaScript programmiert, also bedeutete das, die Dokumentation zu lesen und die Sprache zu lernen.