JavaScript difference between function and new function

javascript, new-operator

Solution

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

Problem

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); ​ ```

Original source

Related problems