Des objets Javascript à l'appel de la fonction à partir de lui-même
J'ai lu le Game Design avec HTML5 et JavaScript, et il m'a présenté à des objets. Ainsi, après la lecture du livre et de travail sur les projets que j'ai décidé de profiter de cette nouvelle connaissance et d'intégrer des objets dans mes propres projets. Alors, voici ma question peut ou devrait objets appeler leurs propres fonctions? Par exemple:
var someObject = {
start: function() {
check();
},
check: function() {
console.log("Check!");
}
};
someObject.start();
Le livre a fait de montrer un exemple avec un timer qui fait cela:
var timer = {
start: function() {
var self = this;
window.setInterval(function(){self.tick();}, 1000);
},
tick: function() {
console.log('tick!');
}
};
Dans l'exemple avec minuterie objet auquel il fait référence à l'autonomie afin d'appeler la fonction interne, donc est-ce à dire que je devrais utiliser l'auto pour appeler les fonctions internes ou est-ce la bonne façon de le faire avec des objets? Ou de meilleures pratiques? Merci à l'avance.
var someObject = {
start: function() {
var self = this;
self.check();
},
check: function() {
console.log("Check!");
}
};
someObject.start();
setTimeout
exemple est parce que son rappel est exécuté dans le contexte global, de sorte que la valeur de this
dans le setTimeout
de rappel est window
. Afin de conserver une référence à l'objet d'origine, vous devez utiliser cette méthode (de les stocker dans self
) ou à l'aide de Function.bind()
OriginalL'auteur CodeEngie | 2013-05-30
Vous devez vous connecter pour publier un commentaire.
JavaScript noms sont lexicalement étendue, chaque fois qu'un nom (variable) est rencontré dans un script, le runtime JavaScript doit rechercher les étendues d'où la fonction a été définie.
Au point de définition de cette fonction:
n'a pas accès à tout
check
fonction à l'extérieur de la portée. Déclarantself
et de la lier àthis
est une technique utilisée pour traiter avec la (peu intéressant) subtilités de la référence à la objet en JavaScript (parce que l'exemple de code utilisewindow.setInterval
).Pour faire référence à une fonction au sein de l'objet en cours, il suffit d'utiliser la
this
.OriginalL'auteur voithos
Le point de la déclaration et l'initialisation d'une variable comme "soi" est à composer avec le fait que la valeur de
this
est à nouveau déterminé lors de chaque appel de fonction. Quand vous avez une fonction imbriquée à l'intérieur d'une autre fonction, et que la fonction interne a besoin d'accéder à la valeur dethis
partir de l'extérieur de contexte, puisthis
doit être conservé dans une autre variable "auto" dans votre cas. (Le nom de cette variable est sans importance, bien sûr.)Dans votre exemple de code:
que la fonction transmise à
setInterval()
doit utiliser la valeur dethis
depuis le "début" de la fonction. Lorsque que l'intervalle de minuterie fonction est appelée, cependant,this
est autre chose (soit le contexte mondial ounull
en "strict" en mode). Ainsi, en économie de la valeur dethis
dans le contexte où que l'intervalle de la fonction de minuterie est instancié, son code pouvez l'utiliser pour accéder à l'objet timer.Dans votre deuxième exemple, la déclaration et l'initialisation d'un "soi" variable n'est pas mal en soit, mais c'est inutile. Il est parfois pratique cependant, juste pour clarifier le code, même si bien sûr un nom plus explicite que "soi" serait une bonne idée.
oui, c'est vrai.
OriginalL'auteur Pointy
C'est la fonction javascript contexte, chaque fois que vous créez une fonction, vous devez créer un nouveau contexte (champ d'application).
Dans
setInterval()
fonction vous créez un nouveau champ d'application, de sortethis
ne plus parler que de la mêmethis
ci-dessus:Vous pouvez également manuellement lier le contexte de votre fonction avec
bind()
(si vous n'avez pas besoinself
plus):Plus d'informations:
OriginalL'auteur julesbou
bien sûr, un objet peut et doit appeler ses propres fonctions, c'est la seule façon d'imiter la programmation orientée objet en javascript. Je dirais que la pratique que le livre est à l'aide,
self = this
est mauvais depuisthis
peut seulement être utilisé par elle-même, cependant, dans le premier exemple, il est utilisé pour préserver la valeur de ce qui serait autrement lethis
de la fonction elle-même pas à l'extérieur de la classeIl y a plusieurs raisons pour le faire
var self = this
; un tout autre raison est de faire un script de compression plus efficace.lire l'intégralité de la réponse, je ne dit que la deuxième utilisation est mauvais
OriginalL'auteur aaronman