Je suis conscient du fait que les fonctions en JavaScript mènent une vie double d'une fonction (en tant que chose de première classe pour créer des instances) et la seconde d'un objet normal.
Mais je suis surpris de voir la sortie de la console suivante.
function A() { console.info("A"); } console.info(A.prototype.constructor === A.constructor); // false
Je m'attendais à ce qu'il soit vrai car je ne m'attendais pas à la propriété du constructor
sur l'objet A
car il est propre. Et donc après la recherche de chaîne prototypique, il aurait dû être le même objet que A.prototype.constructor
. Où suis-je faux ou quelle pièce est-ce que je manque?
Où suis-je faux ou quelle pièce est-ce que je manque?
Que A
ne hérite pas de A.prototype
. A
est une fonction (constructeur) et hérite de Function.prototype
. Faire un console.log(Object.getPrototypeOf(A))
🙂
De A.prototype
seulement les new A
instances new A
héritent (dont .constructor
est A
). Voir aussi __proto__ VS. Prototype en JavaScript .
Cela signifie que les deux versions renvoient des valeurs différentes.
Object.prototype.constructor
Renvoie une référence à la fonction Objet qui a créé le prototype de l'instance. Notez que la valeur de cette propriété est une référence à la fonction elle-même, pas une chaîne contenant le nom de la fonction.
Constructeur de fonctions
Le constructeur de fonctions crée un nouvel objet Function. Dans JavaScript, chaque fonction est en fait un objet Function.
Aussi, si vous consolez le code ci-dessus, vous verrez
console.info(A.prototype.constructor);
les sorties
function A() { console.info("A"); }
console.info(A.constructor);
les sorties
function Function() { [native code] } // both are different.