A Layman's Guide to JavaScript Objects
February 2014
This post is a draft. Content may be incomplete or missing.
JavaScript may not seem like an object-oriented programming language at first glance. Although the language does provide object-oriented features, they may not be straightforward to learn if you’re used to a more classical object-oriented language like C++ or Java. This guide aims to be a clear and succinct introduction to objects in JavaScript.
Everything in JavaScript is an Object
That is, any value you can assign a variable to must be an object.
JavaScript has a very simple built-in type system, the root of which is a type
unsurprisingly named Object.
Objects are dictionaries that map String keys to arbitrary Object 
values.
You can specify Object literals using the notation below:
    function getValue(num) { ... }
    var obj = { 'first': getValue(1), 'second': getValue(2) };
The variable obj above holds a reference to an object.
The object it references has two properties: ‘first’ and ‘second’.
We can retrieve them two different ways:
    // The convenient way:
    var first = obj.first;
    // The long way (useful when the property name contains spaces or
    // punctuation):
    first = obj['first'];
A quick note about semantics: the variable obj holds a reference to an
instance of Object, not a subclass.
We’ll talk about inheritance and subclassing later in this guide.
JavaScript provides a few built-in subclasses of Object, each of which
corresponds to a certain type of literal in the language:
- 
    
Booleanis a subtype ofObjectthat is used by thetrueandfalseliterals, and can be used by logical operators. - 
    
Numberis a subtype ofObjectthat is used by numerical (i.e. floating-point) literals, and can be used by arithmetic operators. - 
    
Stringis a subtype ofObjectthat is used by textual literals. 
Another built-in subtype of Object is Function, which is used for function
definition literals:
    var func = function(a, b) { return a + b; }
(Everything to the right-hand side of the = sign is a function literal)
TODO fix this up to flow correctly
Functioncan accept an argument list and function body as a value, and can be called.
The last item above is key: JavaScript functions are Objects, just like any
other data value.
This makes it easy to assign functions to variables, which is one of the things
that make callbacks so ubiquitous in the JavaScript language.