La différence de JavaScript entre la fonction et la nouvelle fonction

Le code JavaScript suivant est très déroutant pour moi. Est-ce que quelqu'un pourrait m'aider à comprendre? Pourquoi PersonY n'a-t-il pas de propriété prototype?

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

 PersonX = function(){}; 

Place une référence à une fonction anonyme dans PersonX . PersonX pointe vers une fonction.

 PersonY = new function(){}; 

Place une référence à une instance nouvellement construite d'une fonction constructeur anonyme dans PersonY . PersonY pointe vers un objet.


En ce qui concerne le prototype, PersonY a un. Cependant, étant donné qu'il n'y avait ni propriétés ni méthodes attachées au constructeur avant ni après l' instanciation, il a un prototype vierge *.

Vous pouvez effectivement vérifier le prototype de console.log(PersonY) faisant console.log(PersonY) . Vous verrez qu'il a un prototype de propriété (je le vois comme __proto__ dans Chrome) qui est "vierge". Mais il a 2 propriétés cachées, constructor qui est la fonction constructeur qui a créé l'objet, et un autre __proto__ qui vous conduit au prochain "lien de chaîne" qui serait l' Object Objet.

* Pas vraiment vierge puisque le prototype est une chaîne. Ce niveau de prototype peut être vide, mais le prototype suivant peut avoir, ou dans ce cas, avoir des propriétés et des méthodes.

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

C'est parce qu'il s'agit en fait d'un objet instancié en mémoire en tant que copie de la fonction; Le prototype n'a vraiment de sens que dans le contexte d'une création de l'instance, donc, une fois qu'il est créé, il n'y a pas de construction logique pour ce que cela signifie.