Qu'est-ce que "renvoyer ceci" dans une fonction javascript?

Je me demande, qu'est-ce que "renvoyer ceci" dans une fonction javascript, quel est son but? En supposant que nous avons le code suivant:

Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; 

Qu'est ce que "renvoyer ceci" dans une fonction?

Je sais quel code ci-dessus, et quel est l'utilisation du mot-clé "this". Je ne sais juste pas ce que "renvoie ce" fait dans une fonction.

Il se réfère à l'instance d'objet sur laquelle la méthode est actuellement appelée. Il est utilisé pour le chaînage. Par exemple, vous pouvez faire quelque chose comme ceci:

 myObject.foo().bar(); 

Puisque foo renvoie this (une référence à myObject ), la bar sera également appelée sur l'objet. C'est la même chose que faire

 myObject.foo(); myObject.bar(); 

Mais nécessite moins de typage.

Voici un exemple plus complet:

 function AnimalSounds() {} AnimalSounds.prototype.cow = function() { alert("moo"); return this; } AnimalSounds.prototype.pig = function() { alert("oink"); return this; } AnimalSounds.prototype.dog = function() { alert("woof"); return this; } var sounds = new AnimalSounds(); sounds.cow(); sounds.pig(); sounds.dog(); sounds.cow().pig().dog(); 

http://jsfiddle.net/jUfdr/

Cela signifie que la méthode renverra l'objet auquel il appartient. Cela peut être utile si vous souhaitez chaîner des instructions comme ceci:

 MyObject.method1().method2().method3(); 

Exemple du monde réel: jQuery

 $(this).addClass('myClass').hide(); 

Td; le retour de this méthode à partir d'une méthode est un moyen commun de permettre le «chaînage» des méthodes ensemble.


this réfère au contexte actuel et modifie le sens en fonction de la manière dont vous utilisez une fonction.

Avec l'invocation de la fonction, this réfère à l'objet global, même si la fonction est appelée à partir d'une méthode, et la fonction appartient à la même classe que la méthode qui l'invoque. Douglas Crockford l'a qualifié de «erreur dans la conception de la langue» [Crockford 28]

Avec l'invocation de méthode, this réfère à l'objet sur lequel la méthode est appelée.

Avec une demande d'appel, this réfère à tout ce que vous l'avez configuré lors de l'appel à la demande.

Avec l'invocation du constructeur, this réfère à l'objet créé pour vous derrière les scènes, qui est renvoyé lorsque le constructeur sort (pourvu que vous ne renvoyiez pas votre objet d'une manière erronée à partir d'un constructeur).

Dans votre exemple ci-dessus, vous créez une nouvelle méthode appelée method qui vous permet d'ajouter des fonctions de manière dynamique, et la renvoie, ce qui permet de faire un chaînage.

Donc, vous pourriez faire quelque chose comme:

 Car.method("vroom", function(){ alert("vroom"); }) .method("errrk", function() { alert("errrk"); }); 

etc.

Il renvoie cela, signifiant généralement l'élément html qui l'a appelé, mais "ceci" peut avoir diverses significations http://www.quirksmode.org/js/this.html