Maison > Questions et réponses > le corps du texte
function Persion(name) {
var self = this;
self.name = name;
console.log(self);
console.log(this);
}
Persion.prototype = {
before: function() {
// var self = this;
console.log('before' + self);
console.log('before' + this);
return this;
},
after: function(){
// var self = this;
console.log('after' + self);
console.log('after' + this);
return this;
}
};
var a = new Persion('Tom');
a.before().after();
Lorsque var a = new Persion('Tom'), self et this pointent toujours vers Persion. Lors de l'exécution de a.before().after(), self pointe vers Window, je veux utiliser self pour enregistrer ceci. pas de changement artificiel de soi, alors pourquoi la valeur de soi change-t-elle ? Quel est le principe ?
Supplément :
C'est la phrase du haut var self= this ; lors du débogage, j'ai constaté que self était passé de Persion à window. J'ai commenté les déclarations avant et après et j'ai constaté que lorsque self n'était pas déclaré, la sortie n'était pas indéfinie mais. fenêtre
ringa_lee2017-05-19 10:10:29
La variable self n'est pas définie dans la fonction before, donc self fait ici référence à window.self. La propriété
self renvoie une référence en lecture seule à la fenêtre elle-même. Équivalent à la propriété Window.
巴扎黑2017-05-19 10:10:29
Je comprends qu'il y a un problème. Mon problème est extrait de mon code et simplifié Il y a une partie asynchrone dans le code original, et cela devient fenêtre dans la partie asynchrone. Lors du débogage, j'ai découvert que le self dans la phrase du haut var self= cela passait de Persion à window, j'ai donc pensé qu'il y avait quelque chose qui n'allait pas avec self.