Type de référence
Les types de référence incluent principalement: Type d'objet, type de tableau, type de date, type Regexp, type de fonction, etc.
Lorsque des types de référence sont utilisés, un objet (instance) doit être généré à partir d'eux. En d'autres termes, un type de référence équivaut à un modèle. Lorsque nous voulons utiliser un certain type de référence, nous devons utiliser ce modèle pour générer un objet à utiliser, de sorte que le type de référence est parfois appelé définition d'objet.
Par exemple, nous devons générer un objet de personne pour définir les informations personnelles et les comportements de quelqu'un, nous devons donc compter sur le type d'objet:
var person = new object (); personne.name = "jiangsui"; personne.sayName = function () {console.log (this.name);}L'objet personne ci-dessus est défini par le "modèle" à l'aide du nouvel opérateur à l'aide du type d'objet. Après cela, vous pouvez ajouter le nom d'attribut et la méthode SayName à cet objet. Les propriétés et les méthodes sont des «fonctions» des types d'objets, de sorte que les objets créés via des types de référence tels que l'objet peuvent être utilisés.
La création d'un objet ne nécessite pas nécessairement l'utilisation du nouvel opérateur. Certains types peuvent être simplifiés dans la création. Par exemple, créant un objet d'objet de type comme ci-dessus, vous pouvez également utiliser les deux méthodes suivantes:
var personne = {}; personne.name = "jiangsUi"; personne.sayName = function () {console.log (this.name);}ou
var person = {name: "jiangsUi", SayName: function () {console.log (this.name); }};La fonction de l'opérateur {} est la même que le nouvel objet (), simplifiant les opérations. Il existe quelques différences dans les deux méthodes d'écriture ci-dessus. Le premier est "ajouter", c'est-à-dire dans la définition précédente, continue d'ajouter des attributs ou des méthodes. Si la méthode d'attribut du même nom existe déjà auparavant, elle sera écrasée. Le deuxième type est "remplacement", ce qui signifie que, que les propriétés et les méthodes de l'objet de personne soient définies précédemment, cette méthode remplacera le contenu précédemment défini par le contenu nouvellement défini. Étant donné que l'objet généré par le type de référence est une région stockée en mémoire, puis son pointeur est enregistré dans une certaine variable (personne), la deuxième façon d'écrire est de générer un nouvel objet (nouvelle zone de mémoire), puis de pointer la variable de la personne vers la nouvelle zone de mémoire, donc le précédent est remplacé. Comprendre cela est crucial pour la compréhension ultérieure.
L'utilisation d'autres types de référence est à peu près la même, comme le type de tableau, qui peut également être utilisée pour générer des objets ou les définir directement. Après avoir généré un objet de tableau, vous pouvez stocker le contenu d'information au format du tableau. De plus, l'objet obtiendra les méthodes définies dans le type de tableau, telles que Push, Shift, Sort, etc., et vous pouvez appeler ces méthodes, telles que:
var couleurs = []; couleurs.push ('rouge', 'vert'); console.log (couleurs);Le code ci-dessus crée un objet de type tableau via le type de tableau, puis appelle la méthode push définie précédemment dans le type de tableau, ajoute deux valeurs rouges et vertes à l'objet, et l'imprime enfin sur la console et vous pouvez le voir.
Appelez et appliquez des méthodes
Ces deux méthodes sont fournies par le type de fonction, ce qui signifie qu'elles peuvent être utilisées sur les fonctions. La fonction de l'appel est la même que la méthode d'application, à savoir qu'elle peut élargir la portée du fonctionnement de la fonction. La différence est que lors de l'utilisation de l'appel, les paramètres transmis à la fonction doivent être répertoriés un par un, mais la méthode d'application ne l'utilise pas. De cette façon, vous pouvez décider d'utiliser l'appel ou de postuler en fonction des exigences de votre propre fonction.
Que signifie la portée de l'opération de fonction d'extension? Vous comprendrez en donnant un exemple.
Vous pouvez comprendre de cette façon que la fonction est enveloppée dans un conteneur (portée), et il existe certaines variables ou d'autres choses dans ce conteneur. Lorsque la fonction s'exécute, ces variables sont appelées, etc., vous trouverez cette chose dans le conteneur actuel. Ce conteneur enveloppe en fait un récipient plus grand à l'extérieur. Si le petit conteneur actuel ne l'a pas, la fonction recherchera dans le plus grand conteneur, et ainsi de suite, et trouvera le plus grand objet de fenêtre de conteneur. Cependant, si la fonction s'exécute dans le petit conteneur actuel, il existe des variables correspondantes, etc. Dans le petit conteneur, même dans le grand conteneur, la fonction l'appellera toujours dans son propre conteneur.
Les méthodes d'appel et d'application sont de résoudre ce problème et de franchir les limites des conteneurs. Quant à l'exemple précédent:
var person = {name: "jiangsUi", SayName: function () {console.log (this.name); }};Après avoir ouvert la console Chrome, collez-la et exécutez-la, puis exécutez personne.sayName () pour voir
À l'heure actuelle, la personne est un conteneur, ce qui crée une méthode SayName (fonction). Lors de l'exécution, il doit être exécuté sous la portée de la personne. Lorsqu'il est directement exécuté en bas, c'est-à-dire que l'exécution sous la portée de la fenêtre entraînera une erreur non définie car la méthode SayName n'est pas définie sous la fenêtre. Ce pointeur à l'intérieur est une chose spéciale, qui pointe vers la portée actuelle. La signification de celle-ci est d'appeler la valeur du nom en dessous de la portée actuelle.
Ensuite, nous ajoutons un attribut de nom à l'objet Window:
window.name = "yujiangsUi";
Ou directement
name = "yujiangsUi";
Parce que la fenêtre est le plus grand conteneur, la fenêtre peut être omise. Tous les attributs ou variables définis sont attachés à la fenêtre. Si vous ne le croyez pas, vous pouvez voir:
Maintenant, nous voulons exécuter la méthode SayName dans le petit conteneur de la personne sous le grand conteneur de la fenêtre. Nous devons utiliser l'appel ou postuler pour étendre la portée de la méthode SayName. Exécutez l'instruction suivante:
personne.sayName.Call (fenêtre);
ou
personne.sayName.Call (this);
Les résultats de sortie sont les mêmes. Vous pouvez également utiliser Appliquer pour voir l'effet, car cette démo est trop simple et ne nécessite pas de paramètres de passage, donc les fonctions de l'appel et de l'application sont complètement cohérentes.
Permettez-moi d'expliquer le code ci-dessus. SayName est d'abord une instance du type de fonction, qui a la méthode d'appel et la méthode d'application. Étant donné que les méthodes d'appel et d'application sont des méthodes de fonction, nous devons appeler personne
Ensuite, les paramètres des méthodes d'appel et d'application sont une portée (objet), indiquant que la fonction précédente est exécutée sous la portée transmise. Après avoir passé l'objet de fenêtre, ce nom dans la méthode SayName pointe vers Window.name, donc la portée est étendue.
Pourquoi la fenêtre de passage et cela a-t-elle le même effet? Étant donné que l'emplacement actuel de l'exécution de cette fonction est une fenêtre, comme mentionné précédemment, ce pointeur pointe vers la portée actuelle, donc ce pointeur pointe vers la fenêtre, il est donc égal à la fenêtre.