nandin
nandin

Reputation: 2575

What is the default prototype for custom function in JavaScript?

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!

See also: How does __proto__ differ from constructor.prototype?

Upvotes: 9

Views: 5161

Answers (3)

kemiller2002
kemiller2002

Reputation: 115488

Here is a link describing object inheritance:

http://javascript.crockford.com/prototypal.html

http://www.mollypages.org/misc/js.mp alt text
(source: mollypages.org)

Upvotes: 7

Christian C. Salvadó
Christian C. Salvadó

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

Joel Coehoorn
Joel Coehoorn

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

Related Questions