hrishikeshp19
hrishikeshp19

Reputation: 9036

JavaScript difference between function and new function

The following JavaScript code is very confusing to me. Could anyone help me understand. Why does PersonY not have prototype property.

PersonX = function(){};
PersonY = new function(){};
alert(PersonX.prototype);
alert(PersonY.prototype);    
​

Upvotes: 30

Views: 10262

Answers (2)

Joseph
Joseph

Reputation: 119877

PersonX = function(){};

Places a reference to an anonymous function into PersonX. PersonX points to a function.

PersonY = new function(){};

Places a reference to a newly constructed instance of an anonymous constructor function into PersonY. PersonY points to an object.


Regarding the prototype, PersonY has one. However, since there were no properties and methods attached to the constructor before nor after instantiation, it has a blank prototype*.

You can actually check PersonY's prototype by doing console.log(PersonY). You will see that it has a prototype property (I see it as __proto__ in Chrome) which is "blank". But it has 2 hidden properties, constructor which is the constructor function that made the object, and another __proto__ which leads you to the next "chain link" which would be the Object object.

*Not really blank since prototype is a chain. This prototype level may be blank, but the next higher prototype may have, or in this case, does have properties and methods.

Object prototype -> Constructor prototype -> Your Instance will have:
- toString()        - blank                  - toString()
- hasOwnProperty()                           - hasOwnProperty()
- and more...                                - and more...
                                             - ...but nothing from Constructor

Upvotes: 37

Tejs
Tejs

Reputation: 41256

That's because it is actually a object instantiated in memory as a copy of the function; the prototype really only has meaning in the context of a creation of the instance, so once it is created, there is no logical construct for what that means.

Upvotes: 1

Related Questions