2010-08-19 10 views
3

Je sais que 'ceci' diffère à l'extérieur et à l'intérieur de la fermeture.
Mais pourquoi numChildren et this.numChildren diffèrent-ils à l'intérieur de la fermeture?
Ou pourquoi numChildren est-il identique dehors et dedans?Sur 'ce' mot-clé à l'intérieur de la fermeture

var _this:Sprite = this; 
trace("[outside]this: " + this); 
trace("[outside]numChildren: " + numChildren); 
trace("[outside]this.numChildren: " + this.numChildren); 

(function():void { 
    trace("[inside]this: " + this); 
    trace("[inside]numChildren: " + numChildren); 
    trace("[inside]this.numChildren: " + this.numChildren); 
    trace(_this.removeChildAt === removeChildAt); 
    trace(this.removeChildAt === removeChildAt); 
})(); 

Vous pouvez voir le code et la sortie du lien suivant
How Do You Explain 'this'?

Répondre

4

Vous ne pouvez pas accéder à la classe avec le mot-clé « ce » à l'intérieur d'une fermeture. C'est pourquoi vous obtenez ce résultat de trace. Dans votre exemple, la seule façon d'accéder à la classe est d'utiliser la variable _this. A l'intérieur de la fermeture "ceci" se réfère à l'objet global, vous êtes en dehors de la portée de la classe. Les enfants sont identiques à l'extérieur et à l'intérieur car c'est une propriété de la classe, de la même manière que si vous traçiez la propriété "name" à l'extérieur de la fermeture, vous obtiendriez exactement le même résultat. en d'autres termes, ne pas être en mesure d'accéder à la classe en utilisant "this", n'implique pas que vous ne pouvez pas accéder à ses propriétés.

Lorsque vous écrivez this.name ou this.numChildren, à l'intérieur de la fermeture, vous n'êtes pas référence à la plus classe, d'où les différents tra¸age

+0

Merci pour l'explication de détails! – 9re