Table des matières
Table des matières de la série
Global this (navigateur)
This (navigateur) d'une fonction générale
Ceci en fonction d'une méthode objet
ceci sur la chaîne de prototypes d'objets
méthode get/set et this
Ceci
La méthode call/apply et this
méthode de liaison et cette
Résumé
Maison interface Web js tutoriel Une explication détaillée de ceci en JavaScript

Une explication détaillée de ceci en JavaScript

Mar 03, 2017 pm 03:34 PM
javascript

Ceci en JavaScript est relativement flexible. Cela peut être différent selon différents environnements ou lorsque la même fonction est appelée de différentes manières. Mais il y a un principe général, c'est-à-dire que ceci fait référence à l'objet qui appelle la fonction.

Table des matières de la série

  • Une introduction approfondie à la fermeture de JavaScript (Closure)

  • Une entrée -introduction approfondie à JavaScript

  • Une introduction approfondie à la chaîne de prototypes et à l'héritage de JavaScript

Voici mes notes d'étude, qui sont répertoriés en 8 situations.

Global this (navigateur)

Ceci dans la portée globale pointe généralement vers l'objet global, qui est la fenêtre dans le nœud du navigateur. , cet objet est global.

console.log(this.document === document); // true (document === window.document)
console.log(this === window); // true 
this.a = 37;  //相当于创建了一个全局变量a
console.log(window.a); // 37
Copier après la connexion

This (navigateur) d'une fonction générale

Déclaration de fonction générale ou expression de fonction Si la fonction est appelée directement, this pointe toujours vers l'objet global, this. l'objet est une fenêtre, cet objet est global dans le nœud.

function f1(){  
  return this;  
} 
f1() === window; // true, global object
Copier après la connexion

Donnez un autre exemple, ce sera très clair après l'avoir lu

function test(){
 this.x = 1;
  alert(this.x);
}
test(); // 1
Copier après la connexion

Afin de prouver qu'il s'agit de l'objet global, apportez quelques modifications au code :

var x = 1;
function test(){
 alert(this.x);
}
test(); // 1
Copier après la connexion

Le résultat courant est toujours 1. Modifiez-le à nouveau :

var x = 1;
function test(){
 this.x = 0;
}
test();
alert(x); //0
Copier après la connexion

Mais en mode strict, lorsqu'une fonction est appelée, cela pointe vers undefined. C'est l'une des raisons pour lesquelles le nœud utilise le mode strict.

function f2(){  
  "use strict"; // see strict mode  
  return this; 
} 
f2() === undefined; // true
Copier après la connexion

Ceci en fonction d'une méthode objet

Il est courant de l'utiliser comme méthode objet.

Dans l'exemple suivant, nous créons un objet littéral o. Il y a un attribut f dans o. Sa valeur est un objet fonction. Nous appelons souvent la fonction comme la valeur de l'attribut objet. Lorsqu'il est appelé comme méthode d'un objet, cela pointe vers l'objet o

var o = {  
   prop: 37,  
   f: function() {    
     return this.prop;    
  } 
};  

console.log(o.f()); // logs 37
Copier après la connexion

Nous ne devons pas nécessairement définir un objet comme une fonction littérale. Dans le cas suivant, nous définissons uniquement un objet o. , si la fonction indépendante() est appelée directement, cela pointera vers window, mais lorsque nous créons temporairement une propriété f via affectation et la pointons vers l'objet fonction, nous obtenons toujours 37.

var o = {prop: 37}; 

function independent() {  
   return this.prop; 
} 

o.f = independent;  
console.log(o.f()); // logs 37
Copier après la connexion

Cela ne dépend donc pas de la façon dont la fonction est créée, mais tant que la fonction est appelée comme méthode de l'objet, cela pointera vers l'objet.

ceci sur la chaîne de prototypes d'objets

Dans l'exemple suivant : on crée d'abord un objet o, qui a un attribut f et une fonction En tant que valeur de l'attribut d'objet, nous créons un objet p via Object.create(o), p est un objet vide, et son prototype pointera vers o, puis utilisera p.a = 1 pour créer les attributs sur ; l'objet p, alors Quand on appelle la méthode sur le prototype, this.a, this.b peut toujours obtenir a et b sur l'objet p. Ce qu'il faut noter ici, c'est que le prototype de p est o. Lorsque nous appelons p.f(), nous appelons l'attribut f sur la chaîne prototype o Celui-ci sur la chaîne prototype peut obtenir l'objet actuel p.

var o = {f:function(){ return this.a + this.b; }};
var p = Object.create(o); 
p.a = 1; 
p.b = 4; 
console.log(p.f()); // 5
Copier après la connexion

méthode get/set et this

this dans la méthode get/set pointera généralement vers l'objet où se trouve la méthode get/set

function modulus(){   
   return Math.sqrt(this.re * this.re + this.im * this.im); 
} 
var o = { 
  re: 1, 
  im: -1, 
  get phase(){      
     return Math.atan2(this.im, this.re);    
  } 
}; 
Object.defineProperty(o, 'modulus', {       //临时动态给o对象创建modules属性
  get: modulus, enumerable:true, configurable:true}); 

console.log(o.phase, o.modulus); // logs -0.78 1.4142
Copier après la connexion

Ceci

dans le constructeur utilise new pour appeler MyClass en tant que constructeur, cela pointera vers un objet vide, et le prototype de cet objet pointera vers MyClass.prototype (voir cet article pour un résumé de la chaîne de prototypes), mais l'affectation de this.a = 37 a été faite lors de l'appel, donc à la fin cela sera utilisé comme valeur de retour (aucune instruction return n'est écrite, ou si le return est un type de base, ce sera être utilisé comme valeur de retour), le deuxième exemple d'instruction return Si l'objet est retourné, a = 38 sera utilisé comme valeur de retour

function MyClass(){    
   this.a = 37; 
} 
var o = new MyClass();  
console.log(o.a); // 37 

function C2(){    
   this.a = 37;   
   return {a : 38};  
} 

o = new C2();  
console.log(o.a); // 38
Copier après la connexion

La méthode call/apply et this

En plus des différentes méthodes d'appel, certaines méthodes d'objets fonction peuvent modifier l'exécution de la fonction, comme call/apply.

Il n'y a fondamentalement aucune différence entre call et apply, sauf que call transmet les paramètres de manière plate, tandis que apply transmet un tableau. Prenons l'exemple ci-dessous

Quand devez-vous utiliser l'appel et postuler ? Par exemple, si nous voulons appeler Object.prototype.toString, mais que nous voulons spécifier un certain this, alors nous pouvons utiliser Object.prototype.toString.call(this) pour appeler certaines méthodes qui ne peuvent pas être appelées directement. Prenons l'exemple suivant :

function add(c, d){  
   return this.a + this.b + c + d;  
} 
var o = {a:1, b:3}; 
add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16     //第一个参数接收的是你想作为this的对象
add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34 

function bar() {  
   console.log(Object.prototype.toString.call(this)); 
} 
bar.call(7); // "[object Number]"
Copier après la connexion

méthode de liaison et cette

méthode de liaison est fournie à partir d'es5, donc ie9 ne prend en charge que

function f(){  
   return this.a;  
} 

var g = f.bind({a : "test"});   //想把某个对象作为this的时候,就把它传进去,得到一个新对象g
console.log(g()); // test       //重复调用的时候,this已经指向bind参数。这对于我们绑定一次需要重复调用依然实现绑定的话,会比apply和call更加高效(看下面这个例子)

var o = {a : 37, f : f, g : g};  
console.log(o.f(), o.g()); // 37, test  
 //o.f()通过对象的属性调用,this指向对象o;比较特殊的是即使我们把新绑定的方法作为对象的属性调用,o.g()依然会按之前的绑定去走,所以答案是test不是g
Copier après la connexion

Résumé

Quand je travaillais sur le projet, j'ai réalisé à quel point ces concepts de base sont importants. Si vous ne les mettez pas en œuvre un par un, vous tomberez vraiment dans un piège accidentellement. À l'avenir, je résumerai également la chaîne de prototypes, la portée, l'héritage, l'appel de chaîne, la régularité et d'autres connaissances. Bienvenue à suivre

Ce qui précède est l'explication détaillée de ceci en JavaScript. Pour plus de contenu connexe, veuillez. faites attention à PHP Chinese Net (www.php.cn) !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de reconnaissance vocale en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 pm 02:54 PM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel WebSocket et JavaScript : technologies clés pour mettre en œuvre des systèmes de surveillance en temps réel Dec 17, 2023 pm 05:30 PM

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Comment utiliser JavaScript et WebSocket pour mettre en œuvre un système de commande en ligne en temps réel Dec 17, 2023 pm 12:09 PM

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Comment mettre en œuvre un système de réservation en ligne à l'aide de WebSocket et JavaScript Dec 17, 2023 am 09:39 AM

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel JavaScript et WebSocket : créer un système efficace de prévisions météorologiques en temps réel Dec 17, 2023 pm 05:13 PM

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Tutoriel JavaScript simple : Comment obtenir le code d'état HTTP Jan 05, 2024 pm 06:08 PM

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Comment utiliser insertBefore en javascript Comment utiliser insertBefore en javascript Nov 24, 2023 am 11:56 AM

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

JavaScript et WebSocket : créer un système de traitement d'images en temps réel efficace JavaScript et WebSocket : créer un système de traitement d'images en temps réel efficace Dec 17, 2023 am 08:41 AM

JavaScript est un langage de programmation largement utilisé dans le développement Web, tandis que WebSocket est un protocole réseau utilisé pour la communication en temps réel. En combinant les puissantes fonctions des deux, nous pouvons créer un système efficace de traitement d’images en temps réel. Cet article présentera comment implémenter ce système à l'aide de JavaScript et WebSocket, et fournira des exemples de code spécifiques. Tout d’abord, nous devons clarifier les exigences et les objectifs du système de traitement d’images en temps réel. Supposons que nous disposions d'un appareil photo capable de collecter des données d'image en temps réel.

See all articles