Java Reference
In-Depth Information
The Object Constructor Function
As we saw in the last example, all objects inherit from the
Object()
constructor function's
prototype object.
When an object calls a method, the JavaScript engine will check to see if the object has that
method. If it doesn't, it will check if the object's prototype has the method. If not, it will
check whether the prototype's prototype has it. This continues until it reaches the
Object
constructor function's prototype, from which all objects in JavaScript inherit. If the
Object
prototype is without the method, an error will be returned saying the object doesn't exist:
window.unicorn;
<< Error: "window.unicorn is not a function"
But in the prototype chain example, the
Object
prototype was displayed as an empty ob-
ject, so it has no methods—right? Er, actually, that's not the case.
The
Object
prototype object actually has a large number of methods that are inherited by
all objects. The reason why the prototype appears as an empty object literal is because all of
its methods are not enumerable.
Enumerable Properties
Properties that are not
enumerable
will not show up if you use a
for-in
loop to loop
through an object's properties and methods. There is a method called
propertyIsEnu-
merable()
that every object has (because it's a method of the
Object
prototype) that
can be used to check if a property is enumerable. We can see in the following example that
the
eat()
method we created earlier is enumerable (in fact, all properties and methods that
are created by assignment are enumerable):
Turtle.prototype.propertyIsEnumerable("eat");
<< true
All objects inherit a
toString()
method from the
Object
prototype, but as it's not enu-
merable, it won't show up in any objects:
