Les méthodes de création d'objets en Javascript incluent les littéraux d'objet, new+constructor, Object.create(), etc. La méthode Object.create() est-elle le meilleur moyen d'incarner l'idée basée sur un prototype de Javascript ? Comment l'objet créé par new+constructor reflète-t-il l'idée basée sur le prototype ? Laquelle des deux méthodes, méthode littérale objet ou new+constructor, est apparue plus tôt ?
Désolé, je ne sais pas grand-chose sur la première question, j'en ajouterai plus après l'avoir recherchée.
Deuxième question :
Lorsque nous créons un constructeur, il y a un attribut Prototype à l'intérieur. Cet attribut est un pointeur pointant vers l'objet prototype du constructeur
Il est instancié via l'opérateur new + constructeur L'objet a un __proto__ interne. attribut, qui pointe également vers l'objet prototype
Je pense que ce qui peut être reflété est le mécanisme de recherche de variables à travers la chaîne de prototypes
Lors de la recherche d'une variable, elle sera recherchée dans les attributs de l'instance. Si elle ne peut pas être trouvée, elle sera recherchée dans l'objet prototype (l'objet pointé par le __proto__ de l'objet), jusqu'à Object.prototype (car chaque fonction en JavaScript est un objet), renvoie si elle est trouvée, sinon renvoie undéfini
La troisième question :
Le constructeur new+ doit être apparu en premier, car les littéraux d'objet ont été introduits par les développeurs ultérieurs pour simplifier les opérations. De plus, il a été effectivement mis en œuvre
var obj = {};
,其实系统内部真实的执行代码是这样的var obj = new Object();
Première question :
Il y a une explication sur Object.create() sur MDN, vous pouvez y jeter un oeil
https://developer.mozilla.org... (Si vous avez des difficultés en anglais, vous pouvez passer au chinois pour parcourir)
Deuxième question :
new est un mot-clé de JS. Le mécanisme sous-jacent de ce langage peut être deviné, mais je n'ose pas dire à quoi il ressemble. Comment reflète-t-il le prototype ? Cette question est un peu bizarre. Je pense que le prototype des objets JS n'est pas reflété par le nouveau, mais est déterminé par le mécanisme de chaîne de prototypes des objets dans ce langage. Le phénomène qui émerge est le mécanisme de recherche ascendant (ce que la personne ci-dessus a dit). Mécanisme de recherche) La troisième question :
Lorsque vous utilisez des littéraux pour créer des objets,
créez d'abord un objet vide {};
Laissez le __proto__ de l'objet vide pointer vers Object.prototype
Liez ceci à this Au-dessus de l'objet vide ;
Liez les propriétés et les méthodes de l'objet créé à ceci ;
Enfin, renvoyez l'objet ;
Voici essentiellement à quoi il ressemble. S'il y a des erreurs, veuillez les signaler, merci ! (Pour que mes erreurs n'induisent pas les autres en erreur).