我知道'这个'在封闭内外都有所不同。
但为什么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'?
答案 0 :(得分:4)
您无法在闭包中使用关键字“this”访问该类。这就是你获得跟踪结果的原因。 在您的示例中,访问该类的唯一方法是使用_this变量。在闭包内“this”指的是全局对象,你不属于该类的范围。
numChildren在外部和内部都是相同的,因为它是类的属性,就像在外面追踪“name”属性一样。在闭包内部,你会得到完全相同的结果。换句话说,无法使用“this”访问该类,并不意味着您无法访问其属性。
当您在闭包内写入this.name或this.numChildren时,您不再引用该类,因此不同的跟踪输出