Search code examples
javascriptprototype

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?


Solution

  • 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