JS: Object Overview
This page is a overview of JavaScript object system. It's called prototype-based object system.
If you don't know how to create object, read properties, first see: JS: Object Basics.
Summary of JavaScript's Object
- Object is a collection of key/value pairs. Each key/value pair is called “property”.
- Most objects have special purpose, and internal data. For exampe, Function object is a function. Array object has a magical length property. RegExp object is used to match string pattern. Date object holds date/time data, etc. The one object that doesn't have special purpose is the data object, example:
{key1:1, key2:2}
. - Each object has zero or one parent object, called its “prototype”. When a property is accessed, JavaScript will go up the parent object or parent of parent etc to look for the property. (this is called “inheritance”.)
- Each object has a special info attached called the [[isExtensible]] internal slot. It specifies whether new properties can be added to the object
- It's useful to distinguish objects by their origin: {standard object, hosted object, user-defined object}.
Following are details.
What's JavaScript Object
A JavaScript object is a set of unordered key/value pairs.
{Arrays, functions, date, regex, …}, are specialized objects. They have special properties and behaviors than normal objects. But they still are key/value pairs.
[see JS: Object Type]
Standard Object, Hosted Object, User-Created Object
It is useful to distinguish objects by where they came from. We have the following sources:
- Standard Object → Objects from the JavaScript language. For example, arrays, functions, dates, regex,
Math
, etc. - Hosted Object → Objects from the hosting environment. For example, in DOM, there's “document” object as in
document.getElementById(…)
. In Browser, there's “window” object [see JS: Browser's Window Object]. In node.js, there's “http” object as in(require('http')).createServer(…)
. - User-defined Object → User defined. For example,
let obj = {…}
.
Object Internal Slots: [[Prototype]], [[isExtensible]]
Each object has many associated info called “internal slots” by the spec. The two important ones you need to understand for coding JavaScript are:
- [[prototype]] → value is another object or
null
. This is the parent object. This is how JavaScript finds a object's parent. The line of parents is called “prototype chain”. The significance of this “prototype chain” is how object's properties are looked up, called “inheritance”. [see JS: Prototype and Inheritance] - [[isExtensible]] → value is
true
orfalse
. Iftrue
, it means new properties can be added to the object. [see JS: Prevent Adding Property]
Note: In JavaScript spec, “Internal Slots” are indicated by double square brackets [[]].
Note: “Internal Slots” are implementation detail. They are not object properties. JavaScript programers don't need to know about interenal slots, but is very useful to explain some JavaScript behavior.
Ways to Create Object
There are 3 major ways to create data object:
- Literal expression:
{…}
→ Most convenient and most used. Object.create()
→ Most powerful and flexible way to create object, because you can specify parent object, properties, property attributes, all in one function call.- Keyword
new
, innew function_name()
→ complex behavior. It tries to be similar to Java's object oriented programing concepts, but the result is very complex. For some standard objects, such as Date, it's the only way to create it.
[see JS: Object Literal Expression]
[see JS: Object.create]
[see JS: Operator “new”]
Note: remember that function and array are also objects. So, when you define a function (For example, function f(…){…}
) or create a array (For example, ar = [7,2,4]
), you are also creating objects. [see JS: Understand JS Array]
JavaScript Object Property Overview
JS Object and Inheritance
If you have a question, put $5 at patreon and message me.