Log In
Or create an account ->
Imperial Library
Home
About
News
Upload
Forum
Help
Login/SignUp
Index
Liebe Leser!
Inhaltsverzeichnis
Geleitwort
Vorwort
Materialien zum Buch
1 Einführung
1.1 Einleitung
1.2 Entstehung und Historie
1.3 Einsatzgebiete von JavaScript
1.3.1 Clientseitige JavaScript-Webanwendungen
1.3.2 Serverseitige JavaScript-Anwendungen
1.3.3 Desktop-JavaScript-Anwendungen
1.3.4 Mobile JavaScript-Anwendungen
1.3.5 Embedded-Anwendungen
1.3.6 Popularität von JavaScript
1.4 Laufzeitumgebungen
1.4.1 V8
1.4.2 SpiderMonkey/TraceMonkey/JägerMonkey/OdinMonkey
1.4.3 JavaScriptCore
1.4.4 Chakra
1.4.5 Rhino
1.4.6 Nashorn
1.4.7 Dyn.js
1.4.8 Auswahl der richtigen Laufzeitumgebung
1.4.9 Interpreter und Just-in-time-Compiler
1.5 Entwicklungsumgebungen
1.5.1 IntelliJ WebStorm
1.5.2 Visual Studio Code
1.5.3 Aptana Studio 3
1.5.4 Sublime Text 2
1.5.5 NetBeans
1.5.6 JSFiddle, JSBin und Codepen
1.5.7 Fazit
1.6 Debugging-Tools
1.6.1 Das »console«-Objekt
1.6.2 Browser
1.6.3 Node.js Inspector
1.6.4 IDEs und Editoren
1.7 Einführung in die Sprache
1.7.1 Statische Typisierung vs. dynamische Typisierung
1.7.2 Datentypen und Werte
1.7.3 Variablen und Konstanten
1.7.4 Funktionen
1.7.5 Operatoren
1.7.6 Kontrollstrukturen und Schleifen
1.7.7 Fehlerbehandlung
1.7.8 Sonstiges Wissenswertes
1.8 Zusammenfassung und Ausblick
2 Funktionen und funktionale Aspekte
2.1 Die Besonderheiten von Funktionen in JavaScript
2.1.1 Funktionen als First-Class-Objekte
2.1.2 Funktionen haben einen Kontext
2.1.3 Funktionen definieren einen Sichtbarkeitsbereich
2.1.4 Alternativen zum Überladen von Methoden
2.1.5 Funktionen als Konstruktorfunktionen
2.2 Standardmethoden jeder Funktion
2.2.1 Objekte binden mit der Methode »bind()«
2.2.2 Funktionen aufrufen über die Methode »call()«
2.2.3 Funktionen aufrufen über die Methode »apply()«
2.3 Einführung in die funktionale Programmierung
2.3.1 Eigenschaften funktionaler Programmierung
2.3.2 Unterschied zur objektorientierten Programmierung
2.3.3 Unterschied zur imperativen Programmierung
2.3.4 Funktionale Programmiersprachen und JavaScript
2.4 Von der imperativen Programmierung zur funktionalen Programmierung
2.4.1 Iterieren mit der Methode »forEach()«
2.4.2 Werte abbilden mit der Methode »map()«
2.4.3 Werte filtern mit der Methode »filter()«
2.4.4 Einen Ergebniswert ermitteln mit der Methode »reduce()«
2.4.5 Kombination der verschiedenen Methoden
2.5 Funktionale Techniken und Entwurfsmuster
2.5.1 Komposition
2.5.2 Rekursion
2.5.3 Closures
2.5.4 Partielle Auswertung
2.5.5 Currying
2.5.6 Das IIFE-Entwurfsmuster
2.5.7 Das Callback-Entwurfsmuster
2.5.8 Self-defining Functions
2.6 Funktionale reaktive Programmierung
2.6.1 Einführung
2.6.2 ReactiveX und RxJS
2.6.3 Praxisbeispiel: Drag & Drop
2.6.4 Praxisbeispiel: Echtzeitdaten über Web-Sockets
2.7 Zusammenfassung und Ausblick
3 Objektorientierte Programmierung mit JavaScript
3.1 Objekte
3.1.1 Arten von Objekten
3.1.2 Objekte erstellen
3.2 Prototypen
3.3 Vererbung
3.3.1 Prototypische Vererbung
3.3.2 Pseudoklassische Vererbung
3.3.3 Vererbung mit Klassensyntax
3.3.4 Kopierende Vererbung
3.3.5 Mehrfachvererbung mit Mixins
3.4 Datenkapselung
3.4.1 Öffentliche Eigenschaften
3.4.2 Private Eigenschaften
3.4.3 Privilegierte öffentliche Methoden
3.4.4 Nichtprivilegierte öffentliche Methoden
3.4.5 Private Methoden
3.5 Emulieren von statischen Eigenschaften und statischen Methoden
3.6 Emulieren von Interfaces
3.6.1 Interfaces emulieren mit Attribute Checking
3.6.2 Interfaces emulieren mit Duck-Typing
3.7 Emulieren von Namespaces
3.8 Emulieren von Modulen
3.8.1 Das klassische Module-Entwurfsmuster
3.8.2 Das Revealing-Module-Entwurfsmuster
3.8.3 Importieren von Modulen
3.8.4 Module Augmentation
3.8.5 Asynchronous Module Definition (AMD) und CommonJS
3.8.6 Universal Module Definition (UMD)
3.9 Modulsyntax
3.9.1 Module exportieren
3.9.2 Module importieren
3.10 Zusammenfassung und Ausblick
4 ECMAScript 2015 und neuere Versionen
4.1 Einführung
4.2 Block-Scope und Konstanten
4.2.1 Block-Scope
4.2.2 Konstanten
4.3 Striktere Trennung zwischen Funktionen und Methoden
4.3.1 Arrow-Funktionen
4.3.2 Definition von Methoden
4.4 Flexiblerer Umgang mit Funktionsparametern
4.4.1 Beliebige Anzahl an Funktionsparametern
4.4.2 Abbilden von Arrays auf Funktionsparameter
4.4.3 Standardwerte für Funktionsparameter
4.4.4 Benannte Parameter
4.5 Mehrfachzuweisungen über Destructuring
4.5.1 Array-Destructuring
4.5.2 Objekt-Destructuring
4.6 Iteratoren und Generatoren
4.6.1 Iteratoren
4.6.2 Generatorfunktionen und Generatoren
4.7 Promises
4.8 Proxies
4.8.1 Proxies seit ES2015
4.8.2 Emulieren von Proxies in ES5
4.8.3 Anwendungsbeispiel: Proxy als Profiler
4.8.4 Anwendungsbeispiel: Proxy zur Validierung
4.9 Collections
4.9.1 Maps
4.9.2 Weak Maps
4.9.3 Sets
4.9.4 Weak Sets
4.10 Neue Methoden der Standardobjekte
4.10.1 Neue Methoden in »Object«
4.10.2 Neue Methoden in »String«
4.10.3 Neue Methoden in »Array«
4.10.4 Neue Methoden in »RegExp«, »Number« und »Math«
4.11 Sonstiges neue Features
4.11.1 Template-Strings
4.11.2 Symbole
4.11.3 »for-of«-Schleife
4.12 Zusammenfassung und Ausblick
5 Der Entwicklungsprozess
5.1 Einleitung
5.2 Node.js und NPM
5.2.1 NPM installieren
5.2.2 Node.js-Anwendungen installieren
5.3 Styleguides und Code Conventions
5.3.1 Einrückungen
5.3.2 Semikolons
5.3.3 Anführungszeichen bei Strings
5.3.4 Variablendeklaration
5.3.5 Namenskonventionen
5.3.6 Klammern
5.4 Codequalität
5.4.1 JSLint
5.4.2 JSHint
5.4.3 ESLint
5.4.4 JSBeautifier
5.4.5 Google Closure Linter
5.4.6 Fazit
5.5 Dokumentation
5.5.1 JSDoc 3
5.5.2 YUIDoc
5.5.3 ESDoc
5.5.4 Unterstützte Tags
5.5.5 Fazit
5.6 Konkatenation, Minification und Obfuscation
5.6.1 YUI Compressor
5.6.2 Google Closure Compiler
5.6.3 UglifyJS2
5.6.4 Fazit
5.7 Package Management und Module Bundling
5.7.1 Package Management mit NPM
5.7.2 Module Bundling mit Webpack
5.7.3 Fazit
5.8 Building
5.8.1 Grunt
5.8.2 Gulp JS
5.8.3 NPM Scripts nutzen
5.8.4 Fazit
5.9 Scaffolding
5.9.1 Yeoman
5.9.2 Starterkits
5.10 Zusammenfassung und Ausblick
6 JavaScript-Anwendungen testen
6.1 Testgetriebene Entwicklung
6.1.1 Grundlagen und Begriffsdefinition
6.1.2 Testgetriebene Entwicklung in JavaScript
6.1.3 QUnit
6.1.4 mocha
6.1.5 Jest
6.1.6 Weitere Frameworks
6.1.7 Integration in Build-Tools
6.2 Test-Doubles
6.2.1 Sinon.JS
6.2.2 Spies
6.2.3 Stubs
6.2.4 Mock-Objekte
6.3 Testabdeckung
6.3.1 Einführung
6.3.2 Blanket.js
6.3.3 Istanbul
6.4 DOM-Tests
6.5 Funktionstests
6.5.1 PhantomJS
6.5.2 CasperJS
6.6 Zusammenfassung und Ausblick
7 Fortgeschrittene Konzepte der objektorientierten Programmierung
7.1 SOLID
7.1.1 Single-Responsibility-Prinzip (SRP)
7.1.2 Open-Closed-Prinzip (OCP)
7.1.3 Liskovsches Substitutionsprinzip (LSP)
7.1.4 Interface-Segregation-Prinzip (ISP)
7.1.5 Dependency-Inversion-Prinzip (DIP)
7.2 Fluent APIs
7.2.1 Einführung
7.2.2 Synchrone Fluent APIs
7.2.3 Asynchrone Fluent APIs mit Callbacks
7.2.4 Asynchrone Fluent APIs mit Promises
7.2.5 Zugriff auf Original-API
7.2.6 Generische Fluent API Factory
7.3 Aspektorientierte Programmierung in JavaScript
7.3.1 Einführung
7.3.2 Begrifflichkeiten
7.3.3 AOP durch Methodenneudefinition
7.3.4 Die JavaScript-Bibliothek meld
7.3.5 AOP über Decorators
7.3.6 Die Bibliothek aspect.js
7.4 Zusammenfassung und Ausblick
8 Die Entwurfsmuster der Gang of Four
8.1 Einführung
8.2 Erzeugungsmuster
8.2.1 Objekte an einer zentralen Stelle erzeugen (Abstract Factory/Factory Method)
8.2.2 Nur ein Objekt von einem Typ erstellen (Singleton)
8.2.3 Erstellen von komplexen Objekten (Builder)
8.2.4 Ähnliche Objekte erstellen (Prototype)
8.3 Strukturmuster
8.3.1 Die Schnittstelle anpassen (Adapter)
8.3.2 Abstraktion und Implementierung entkoppeln (Bridge)
8.3.3 Objekte in Baumstrukturen anordnen (Composite)
8.3.4 Eigenschaften unter Objekten teilen (Flyweight)
8.3.5 Objekte mit zusätzlichen Funktionalitäten ausstatten (Decorator)
8.3.6 Einheitliche Schnittstelle für mehrere Schnittstellen (Facade)
8.3.7 Den Zugriff auf Objekte abfangen (Proxy)
8.4 Verhaltensmuster
8.4.1 Über Datenstrukturen iterieren (Iterator)
8.4.2 Den Zugriff auf Objekte beobachten (Observer)
8.4.3 Eine Vorlage für einen Algorithmus definieren (Template Method)
8.4.4 Funktionen als Parameter übergeben (Command)
8.4.5 Algorithmen als Funktionen beschreiben (Strategy)
8.4.6 Das Zusammenspiel mehrerer Objekte koordinieren (Mediator)
8.4.7 Den Zustand eines Objekts speichern (Memento)
8.4.8 Operationen auf Objekten von Objekten entkoppeln (Visitor)
8.4.9 Das Verhalten eines Objekts abhängig vom Zustand ändern (State)
8.4.10 Eine Repräsentation für die Grammatik einer Sprache definieren (Interpreter)
8.4.11 Anfragen nach Zuständigkeit bearbeiten (Chain of Responsibility)
8.5 Zusammenfassung und Ausblick
9 Architekturmuster und Konzepte moderner JavaScript-Webframeworks
9.1 Model View Controller
9.2 Model View Presenter
9.3 MVC und MVP in Webanwendungen
9.3.1 Klassische Webanwendungen
9.3.2 Moderne Webanwendungen
9.4 Model View ViewModel
9.4.1 MVVM am Beispiel von Knockout.js
9.4.2 Kombination von MVC und MVVM am Beispiel von AngularJS
9.5 Komponentenbasierte Architektur
9.5.1 Komponentenbasierte Architektur am Beispiel von Angular
9.5.2 Komponentenbasierte Architektur am Beispiel von React
9.5.3 Komponentenbasierte Architektur am Beispiel von Vue.js
9.6 Routing
9.7 Zusammenfassung und Ausblick
10 Messaging
10.1 Einführung
10.2 AMQP
10.2.1 Producer und Consumer
10.2.2 Exchanges
10.3 AMQP unter JavaScript
10.3.1 Installation eines Message-Brokers für AMQP
10.3.2 AMQP-Clients für JavaScript
10.3.3 Senden und Empfangen von Nachrichten
10.3.4 Verwenden von Exchanges
10.3.5 STOMP
10.4 MQTT
10.4.1 Publish-Subscribe und Topics
10.4.2 Wildcards
10.4.3 Quality of Service
10.4.4 Last Will and Testament
10.4.5 Retained Messages
10.4.6 Persistent Sessions
10.5 MQTT unter JavaScript
10.5.1 Installation eines Message-Brokers für MQTT
10.5.2 MQTT-Clients für JavaScript
10.6 Zusammenfassung und Ausblick
11 Continuous Integration
11.1 Vorbereitungen
11.1.1 Installation von Docker
11.1.2 Installation des Git-Servers Gogs
11.1.3 Anlegen eines Git-Repositorys
11.1.4 Hinzufügen eines SSH-Schlüssels
11.1.5 Anlegen des Beispielprojekts
11.2 Jenkins
11.2.1 Installation
11.2.2 Installieren von Plugins
11.2.3 Anlegen von Jobs
11.2.4 Jenkins mit Node.js steuern
11.3 Alternativen: Travis CI und CircleCI
11.4 Zusammenfassung und Ausblick
Stichwortverzeichnis
Rechtliche Hinweise
Über den Autor
← Prev
Back
Next →
← Prev
Back
Next →