在关闭内的'this'关键字

时间:2010-08-19 02:54:51

标签: actionscript-3 this

我知道'这个'在封闭内外都有所不同。
但为什么numChildren和this.numChildren在封闭内部有所不同? 或者为什么numChildren在内外相同?

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);
})();

您可以通过以下链接查看代码和输出 How Do You Explain 'this'?

1 个答案:

答案 0 :(得分:4)

您无法在闭包中使用关键字“this”访问该类。这就是你获得跟踪结果的原因。 在您的示例中,访问该类的唯一方法是使用_this变量。在闭包内“this”指的是全局对象,你不属于该类的范围。

numChildren在外部和内部都是相同的,因为它是类的属性,就像在外面追踪“name”属性一样。在闭包内部,你会得到完全相同的结果。换句话说,无法使用“this”访问该类,并不意味着您无法访问其属性。

当您在闭包内写入this.name或this.numChildren时,您不再引用该类,因此不同的跟踪输出