开发者

What is the default prototype for custom function in JavaScript?

f开发者_开发知识库unction 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?


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:

  • 13.2 Creating Function Objects

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


Here is a link describing object inheritance:

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

http://www.mollypages.org/misc/js.mp

What is the default prototype for custom function in JavaScript?


(source: mollypages.org)


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜