
Explore common problems with function constructors in JavaScript, including forgetting to use new, global variable pollution, and prototype pollution that can create security risks for instances.
Use factory functions in JavaScript to encapsulate player data with private variables and public methods. Expose actions like get level, get name, attack, and damage, while keeping internals private.
Learn how to selectively inherit methods from one function factory using prototype-based inheritance and ES6 destructuring, enabling you to reuse a single 'same name' method while keeping other properties private.
Explore how modules declare dependencies and expose public methods like make uppercase and write to the DOM, using dependency injection and an immediately invoked function expression to ensure testable code.
Explore JavaScript prototype inheritance across multiple levels, from animal to rabbit to long ear, and how the prototype chain provides inherited methods like walk.
Share methods and properties across objects with prototypes to reduce duplication, avoid modifying built-ins, and consider performance using Object.create for safe prototype-linked creation.
Explore the inversion of control problem with callbacks in a purchase tracking example, highlighting risks like multiple or missing callbacks and callback hell, and preview promises as the ES6 solution.
Explore how promises address callback hell and inversion of control in JavaScript, outlining pending, fulfilled, and rejected states, and showing a promise constructor with resolve and reject and converting callbacks.
Learn to handle multiple errors in a promise chain by adding individual catch blocks after each then, enabling continued execution and fine-grained error control.
Explore promise chaining and error handling in JavaScript, where each then returns a new promise, and learn how chained vs separated then calls affect settled value and inversion of control.
Create a custom promise implementation to reveal how the native Promise API works and why it behaves that way, using my promise class with then, catch, resolve, and reject.
Implement the on rejected with resolve path for a custom promise, queuing a microtask, handling on rejected callbacks, and propagating values through resolve or reject with proper state updates.
Demonstrate building a custom promise from scratch, with state, then and catch, and chaining via a bespoke waiting for function, alongside native promise comparisons.
Explore how the fetch API returns promises, chain then, convert responses to JSON, and render cat GIFs from Giphy while learning promise-based workflows in asynchronous JavaScript.
Explore how async/await in es eight wraps promises to simplify asynchronous code, using the async keyword on functions, returning values as resolved promises, and using then to access results.
Explore how await accepts thenable objects and resolves values via a callable then method, enabling compatibility with promise-like objects.
Learn how let differs from var: you cannot access before initialization (var hoists to undefined), and you cannot redeclare let, improving variable safety.
Advanced JavaScript lecture explains how default parameters give functions fallback values in the parameter list, preventing falsey inputs from breaking calls and simplifying code.
Understand the spread operator in JavaScript, spreading array elements into individual arguments, contrasting with the rest operator, and comparing it to apply for combining arrays and function calls.
Explore the object.assign method in modern JavaScript to merge a defaults object with a provided options object, giving precedence to user-supplied properties and creating a final options object.
Iterate over maps with for-of to access keys and values via keys and values methods. Use maps to store keys of any data type and preserve insertion order.
Join the memory-efficient weak maps, which use only objects as keys, disallow primitives and allow garbage collection of unused key objects while the map remains in use.
Discover how to use sets to remove duplicates from an array in JavaScript and convert the resulting set back to an array with Array.from.
Create a union of two sets, then compute their intersection and difference using the spread operator on sets and arrays to reveal unique or common elements.
Learn to use the array.find method to return the first object with activated true. Explore the array.includes method to check a value's presence and get a boolean result.
Explore the rest operator in advanced JavaScript, transforming the arguments object into a real array and gathering variadic parameters, contrasting with slice and noting syntax rules.
Explore arrow functions in JavaScript, using concise syntax, implicit returns for single parameters, and when to use braces for multiple expressions, while understanding function expressions and declarations.
Explore how arrow functions solve the this binding problem in JavaScript by replacing the self hack and bind patterns with lexical this, contrasting with function expressions.
Explore object initialization shorthand in JavaScript, using the same name for keys and variables to create cleaner, less repetitive objects like first name, last name, and full name.
Learn how to add functions to objects using the ES6 method shorthand, converting full function declarations into concise object methods while preserving existing properties.
Explore template strings in JavaScript to embed expressions, create multiline strings, and interpolate variables cleanly, reducing string concatenation and improving readability.
Explore how object.assign creates a new object to update properties like completed, compare with the spread operator, and preserve immutability in stateful contexts such as React and Redux.
Learn why plain JavaScript objects are not iterable with the for..of loop, and how Symbol.iterator determines iterability, contrasting with arrays that expose a function at Symbol.iterator.
Compare sets and weak sets in JavaScript by illustrating that weak sets accept only objects, support add, has, and delete, and are not iterable, enabling memory efficiency.
Learn promises in action by creating a new promise with resolve and reject, delaying with setTimeout, perform a name check, and handle outcomes with then.
Advance your understanding of promises by chaining then calls, replacing nested callbacks with clean, reusable logic, and handling errors with a rejected promise.
Boot six modules quickly with Create React App to bypass configuration and focus on module system. Start the development server with npm start and view the React boilerplate on localhost.
Explore boilerplate setup in a preconfigured JavaScript project, navigate source, public, and modules directories, leverage hot loading, and begin creating, importing, and exporting files from the console.
Abdi has spent many years mastering the language of Javascript and has experience and best practices from top developers to create this advanced JavaScript course. This course will take you from a basic understanding of the language to a point where you can teach it to others, understand grey areas, and impress your co-workers, ultimately turning you into a senior Javascript engineer.
You'll learn more than just patterns, techniques, and best practices. You'll gain a deep understanding of the "why" behind the toughest parts of the language. This level of understanding will enable you to explain concepts with confidence in interviews and meetings, proving that you're a senior Javascript engineer.
By diving deep into the language, you'll gain the confidence and knowledge needed to become a top Javascript developer. This course goes beyond the basics and is essential for web developers, React, Angular, Vue.js developers, and Node.js backend developers since Javascript is at the core of these professions.
Topics covered in this course are:
Javascript Engine
Javascript Runtime
Writing Optimized Code
Call Stack + Memory Heap
Garbage Collection
Node.js
Modern JavaScript
Single Threaded Model
Scope Chain
Hoisting
Function Invocation
Function Scope vs Block Scope
IIFEs
Primitive Types
Arrays, Functions, Objects
Closures
Prototypal Inheritance
OOP (Object Oriented Programming)
Private vs Public properties
Asynchronous JavaScript
Callbacks, Promises, Async/Await
Event Loop + Callback Queue
Task Queue + Microtask Queue
Modules in Javascript