Reputation: 2575
function f()
{
}
alert (f.prototype); // returns something like [object Object]
My understanding is by default the prototype of custom function should be null or undefined, can someone shed some light? thanks!
Upvotes: 9
Views: 5161
Reputation: 115488
Here is a link describing object inheritance:
http://javascript.crockford.com/prototypal.html
http://www.mollypages.org/misc/js.mp
(source: mollypages.org)
Upvotes: 7
Reputation: 827446
The prototype
property of function objects is automatically created, is simply an empty object with the {DontEnum}
and {DontDelete}
property attributes, you can see how function objects are created in the specification:
Pay attention to the steps 9, 10 and 11:
9) Create a new object as would be constructed by the expression new Object()
.
10) Set the constructor property of Result(9) to F. This property is given attributes { DontEnum }
.
11) Set the prototype property of F to Result(9). This property is given attributes as specified in 15.3.5.2.
You can see that this is true by:
function f(){
//...
}
f.hasOwnProperty('prototype'); // true, property exist on f
f.propertyIsEnumerable('prototype'); // false, because the { DontEnum } attribute
delete f.prototype; // false, because the { DontDelete } attribute
Upvotes: 11
Reputation: 415850
It's not undefined because you just defined it. Just because your function f()
object is still empty doesn't mean it's not defined. It's just defined to have no contents.
Upvotes: 0