Avant-hier, un internaute m'a laissé un message me demandant : qu'est-ce qu'Object ? Comme j'ai été occupé à reconstruire le contrôle TreeView ces deux derniers jours, je suis vraiment désolé de ne pas avoir répondu à temps. Prenez le temps aujourd'hui de jeter un œil à ce qu'est exactement Object en JavaScript ? Quelle est la relation entre objet et fonction ? J'apprécie les corrections si je me trompe.
Bien qu'il s'agisse d'un message privé, j'espère que vous ne me blâmerez pas si vous l'envoyez de manière anonyme. S'il y a quelque chose qui ne va pas, faites-le-moi savoir.
Quel est exactement l’objet de js ?
Au début, je pensais qu'Object était le prototype de tous les objets en js.
Mais : alert(Object.constructor) affiche la fonction Function...
Cela signifie que le prototype d'Object est Function ?
Mais le problème revient :
Function.prototype.read=function(){};//Prototype de fonction étendue
for(var i in Object)alert(i)//affiche read, ce qui confirme en outre que le prototype de l'objet est Function
Object.prototype.read=function(){};//étend le prototype de l'objet
for(var i in Function)alert(i)//Display read, le prototype de Function est Object ? ? ? ?
Qu’est-ce qu’un objet exactement ? L'objet et la fonction en tant que classes sont-ils la même chose ?
Cet ami a confondu Constructeur, Prototype et Fonction car JavaScript est un langage basé sur des objets (JavaScript ne contient pas de classes appropriées). Il est en fait possible de dire qu'Object est le prototype de tous les objets, mais cela fait référence au concept de prototype dans le modèle de prototype du modèle de conception, et non à la fonctionnalité du langage prototype de JavaScript appelée Object.prototype.
Alors, qu’est-ce que l’objet exactement en JavaScript ? Script56.chm (le tutoriel officiel de M$) dit : Fournit des fonctions communes pour tous les objets JScript. Eh bien, tu comprends ? Parce que je devrais comprendre, mais je n'ai toujours pas l'air de comprendre @_@. Si nous regardons la structure des données, un objet (une instance de Object) est une collection non ordonnée, une structure similaire à map en C++, hashtable en C# et hashmap en Java. Et il contient une valeur primitive attribuée par le système de langage JavaScript. Qu'est-ce que cela signifie ? L'objet a une méthode appelée valueOf, sa fonction est de renvoyer la valeur d'origine de l'objet spécifié. Cela peut également être trouvé dans Script56, et il existe également un tableau répertoriant les résultats de retour valueOf des objets système. En d’autres termes, les objets tels que Array, Boolean, Date, Function, Number, etc. proviennent en fait tous d’Object et leurs ancêtres sont tous Object. Ils représentent différentes fonctionnalités du langage. Par exemple, Array a un attribut de longueur géré automatiquement, Boolean n'a que des valeurs vraies ou fausses, Date représente une structure temporelle et Function peut être exécuté. Ce sont toutes des capacités qui leur sont données par leur type d'origine (valueOf). ). L'objet n'est en fait qu'un concept. Le langage JavaScript est basé sur des objets, ce qui signifie que tous les types intégrés sont abstraits d'un ensemble de méthodes et de propriétés communes (également appelées comportements et états). ces caractéristiques sont Objet. En fait, Object n'est pas très utile en programmation. Nous utilisons tous l'objet d'instance d'Object, puis utilisons la fonctionnalité de collection d'Object (expando) pour développer l'objet afin qu'il devienne ce que nous voulons. Pour Object.prototype, ce n'est en fait pas très utile, car chaque type spécifique a son propre prototype, et la plupart des méthodes de prototype que nous ajoutons sont destinées à certains types.
En plus du prototype, Object possède également un attribut très important : le constructeur. Cette chose est utilisée pour compléter l'expansion de l'objet que j'ai mentionné plus tôt. C'est également la base pour nous d'utiliser JavaScript pour simuler la POO. Puisque tout en JavaScript est Objet, le constructeur l'est aussi, mais son type d'origine est Fonction (exécutez Object.constructor.valueOf() pour obtenir : function Function() { [code natif] }). Bien entendu, à l’inverse, tous les objets JavaScript n’ont pas d’attribut constructeur, et certains objets intégrés n’ont pas de constructeur.
Concernant la relation entre objet et fonction, je pense que ce n'est pas un bon code de test : Function.prototype.read=function(){};//Extended Function prototype
for(var i in Object)alert(i)//affiche read, ce qui confirme en outre que le prototype de l'objet est Function
Object.prototype.read=function(){};//étend le prototype de l'objet
for(var i in Function)alert(i)//Display read, le prototype de Function est Object ?
Ces quatre lignes de code sont utilisées pour expliquer le principe du prototype JavaScript et simuler la méthode d'héritage du prototype de la programmation OO. Cependant, elles ne peuvent pas expliquer clairement la relation entre Objet et Fonction : (au contraire, elles tromperont ! le public.
Décrivons brièvement chacune des différentes fonctions des types d'objets JavaScript :
Objet natif : objets fournis par le langage JavaScript qui ne dépendent pas de l'hôte d'exécution. Certains d'entre eux sont des objets intégrés, tels que Global et Math ; d'autres sont créés et utilisés dans l'environnement d'exécution du script, tels que : Array, Boolean. , Date, Fonction, Numéro, Objet, RegExp, Erreur.
Objet intégré : les objets intégrés fournis par le langage JavaScript qui ne dépendent pas de l'hôte d'exécution, tels que Global et Math, sont tous des objets natifs.
Objet hôte : tout objet fourni par le langage JavaScript qui dépend de l'environnement hôte. Tous les objets objet non natifs sont des objets hôtes, tels que : une fenêtre dans IE, une instance wscript dans WScript, toute classe créée par l'utilisateur.