About the Book
Programming languages are (loosely) defined by their basic activity. In FORTRAN, you program with numbers. In C, you program with pointers. In ML, you program with types. And in JavaScript, you program with functions.
Functions are very interesting building blocks for programs, because they compose: It’s easy to build a programming style based on making many small things that can be combined and recombined to make bigger things.
This is the basis of the vaunted “Unix Philosophy:” Write small utilities and scripts that compose neatly. This is also the JavaScript philosophy: Make small things that can be combined and recombined to make bigger things.
Programming with objects can be done in this style, and JavaScript makes it particularly easy to combine and recombine small parts. Classes can be built from traits instead of from superclasses. Objects can delegate and forward behaviour to helpers and meta-objects. Adaptors can be written to change an object’s interface without needing to create another class in a hierarchy.
JavaScript Spessore is a book that describes this approach to working with objects and metaobjects in JavaScript. It’s exactly the same philosophy as you find in JavaScript Allongé, only it talks to programming with objects instead of programming with functions.
JavaScript Spessore will show you how to build JavaScript programs that scale in code, in time, and across a team, using the one technique that has passed the test of time: Objects and metaobjects that have a single responsibility, are decoupled from each other, and can be composed freely.
Go ahead, read it for yourself. It’s free.
Read More Read Less
-
Feedback
Share this book
Table of Contents
-
Prefaces
- Taking a page out of LiSP
- JavaScript Allongé
-
The Big Idea
- Is JavaScript Functional or Object-Oriented?
- JavaScript Algebras
- Composeability
-
JavaScript’s Objects
- Data Structures
- Plain Old JavaScript Objects
- Encapsulating State with Closures
- Composition and Extension
- This and That
- What Context Applies When We Call a Function?
- Extending Objects
-
Object Recipes
- Records and Value Objects
- Accessors
- Hiding Object Properties
- Proxies
-
Instances and Prototypes
- Prototypes are Simple, it’s the Explanations that are Hard To Understand
- Binding Functions to Contexts
- Object Methods
- Extending Objects with Delegation
-
Methods
- What is a Method?
- The Letter and the Spirit of the Law
- Composite Methods
- Method Objects
- Predicate Dispatch
-
Metaobjects
- Why Metaobjects?
- Mixins, Forwarding, and Delegation
- Later Binding
- Conflict Resolution Policies
- Delegation via Prototypes
- Singleton Prototypes
- Shared Prototypes
- Metaobjects and “self”
- Interlude: Greenspun’s Tenth Rule
-
Encapsulation and Composition
- The Encapsulation Problem
- Proxies
- Encapsulation for Metaobjects
-
encapsulate(...) - Encapsulation and Self
- Privacy
- Closing Encapsulated Objects
- Decoupling with Partial Proxies
- Composing Metaobjects
- Transforming and Decorating Metaobjects
- Playing Well with Classes
-
Inheritance, Ontologies, and Semantic Types
- Class Hierarchies
- Getting the Semantics Right
- Structural vs. Semantic Typing
- Interlude: “is-a” and “was-a”
- The Expression Problem
- Multiple Dispatch
-
Metaobject Protocols
- Genesis
- The Class Class
- Class Mixins
- Well, Actually…
-
Source Code Examples
- Object Recipes
- Methods
- Metaobjects
- Greenspun’s Tenth Rule
- Encapsulation and Composition
- Inheritance
- Utility Functions
- Copyright Notice
- About The Author
Read More Read Less