Différence entre l’utilisation de soi variable et de celle-ci

J’avais du mal à utiliser ces “ceci” avec la méthode .bind () et à utiliser la variable “self = this”. Pour obtenir deux résultats différents avec ceux-ci, il me manque donc un concept. Le cas est comme suit:

// Defining a callback class to use after resortingeving data var Callback = (function(){ // UPDATED!! Local vbles var template_to_use, html_element, self; function Callback(){ self = this, template_to_use = null, html_element = null; } var p = Callback.prototype; p.set_template = function(template_funct){ self.template_to_use = template_funct; }; p.set_html_element = function(html_element){ self.html_element = html_element; }; p.use_callback = function(data){ $(self.html_element).append(self.template_to_use(data)); }; return Callback; })(); 

L’utilisation de cette fonction est comme suit:

 // Setup callback 1 to call after getting the data var callback_1 = new Callback(); callback_1.set_template(use_templ_1); callback_1.set_html_element("#list"); // Get list data api_list.get_data(callback_1.use_callback); // Setup callback 2 to call after getting more data var callback_2 = new Callback(); callback_2.set_template(use_templ_2); callback_2.set_html_element("#object"); // Get object data api_object.get_data(callback_2.use_callback); 

Deux appels ajax sont exécutés et une fois que la fonction get_data () est terminée, ils appellent les fonctions de rappel que je leur ai transmises. Le problème que je reçois, c’est qu’après l’exécution de ces fonctions, le rappel mentionne toujours l’élément html_element = “#object” avec le modèle correspondant “use_templ_2”.

Si j’utilise “this” et la fonction .bind au lieu du “self” vble, les résultats sont ceux attendus.

 // Get object data api_object.get_data(callback_2.use_callback.bind(callback_2)); 

Qu’est-ce que je rate? Ce pourrait être un concept d’erreur puisque même si je ne suis pas nouveau en js, je suis en train de comprendre le langage lui-même.

Soyez prudent, self fera toujours référence au dernier object instancié:

 var c1 = new Callback(); var c2 = new Callback(); // overrides previous self 

Ensuite, la ligne suivante définit réellement c2.html_element :

 c1.set_html_element(html_element); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

Cela dit, remplacer this est totalement inutile dans votre cas.

Si vous parlez de la différence entre self et this , alors self est utilisé comme référence à this . Cela signifie que même si le contenu de this -ci change, alors self contient toujours le précédent.

Je ne sais pas si c’est assez clair. Si ce n’est pas, jetez un coup d’œil à ce qui sous-tend cet idiome JavaScript: var self = this? ou Différence entre self et this en javascript et quand utiliser l’un ou l’autre .

Essayez également d’éviter d’utiliser self comme variable globale, car les navigateurs l’utilisent aujourd’hui pour quelque chose. Désolé, je ne me souviens plus de quoi. Si quelqu’un pouvait éditer cette information, ce serait génial.