我只是想知道什么时候需要使用关键字this.somevar
而不只是somevar
。
我通常在以下情况下不使用它:
正确?或者这不仅仅是一种风格的东西吗?
答案 0 :(得分:9)
如果您位于具有相同名称的参数并且您想要引用成员变量的函数中,则通常只需使用this.varname。成员var是否为私有对于必须使用'this'没有任何影响。
答案 1 :(得分:4)
正如已经提到的,你不需要在一个非常简单的情况下使用 this ,你想从类成员方法引用一个类成员变量,例如:
public function myClassMethod() : void
{
// "this" is redundant here, as it is implied if omitted
this.myPrivateOrPublicVariable = 123;
}
请注意,有些情况下 this (在程序中遇到它时进行评估,而不是像人们猜测的那样在实例化时)不会引用其中的类这个已经写完了。更具体地说,当您在将使用Function.apply()等方法调用的函数中使用它时,会发生这种情况。此方法允许调用者指定 this 将引用的对象,并且它通常用于回调,例如,在补间引擎中。
// Call myFunction(listOfArguments[0], listOfArguments[1] ...),
// with this referring to objectReferredToByThis.
myFunction.apply(objectReferredToByThis, listOfArguments);
以下是流行的补间引擎Tweener的示例,默认行为是 this 引用补间对象(即MovieClip _mc),而不是其中的类的实例这是写的(即 MyClass )。
package
{
/* ... imports ... */
public class MyClass extends Sprite
{
private var _mc : MovieClip;
public function tweenSomething() : void
{
var tween : Object = {
x: 0,
time: 1,
onComplete: function() : void {
// Here, "this" will not refer to the instance
// of MyClass, but rather to the _mc MovieClip,
// which is the object being tweened below.
this.visible = false;
}
};
Tweener.addTween(_mc, tween);
}
}
}
在上面的代码中,使用 this 是必要的,因为我们要显式地指示运行时修改MovieClip(_mc)的可见状态。如果我们没有使用 this ,那么可见引用会引用 MyClass.visible ,因为函数已关闭。
答案 2 :(得分:3)
如果在对象内部使用它,这将引用对象本身。以下是您将使用它的示例:
package
{
public class foo
{
private var variable:uint;
public function foo(variable:uint)
{
this.variable = variable;
}
}
}
答案 3 :(得分:2)
要添加到其他答案的东西:在ActionScript 3中,您可以通过两种方式引用成员变量和函数:
// 1. the normal way
obj.var = 5;
obj.func();
// 2. the auxiliary way
obj["var"] = 5;
obj["func"]();
这似乎毫无意义,但在某些情况下,例如,将字符串连接成各种组合以在对象中使用随机的,动态指定的变量或函数可能很有用,如下所示:
private function someFunc():void
{
obj[randomFuncStr()]();
}
private function randomFuncStr():String
{
// randomly decide on a function to call and return its name as a String
}
但是,如果您想使用字符串来访问this
内的变量或函数,该怎么办?这不起作用:
"var" = 5; // error
"func"(); // error
所以你需要做的就是:
this["var"] = 5; // the this keyword is good for something after all!
this["func"](); // " " " " " " " " "
其他人已经提到了下一个原因,但我第一次认真对待this.var
或this.func()
在AS3中(而且我通常仍会谨慎地看待它的用法)就在我覆盖UIComponent.setLayoutBoundsSize()
,其中包含名为width
的参数和名为height
的参数。 UIComponent也使用这些名称作为属性,我不喜欢在重写方法时更改参数名称。所以说this.width = x;
或this.height = y;
之类的东西突然变得相关了。除了这两种情况之外,我认为在内部引用同一对象中的变量或函数时没有理由使用this
。
作为旁注,如果由于API的构建方式或其他一些非常好的理由(尽量避免自己设置这样的东西)而不得不做下一件小事,有时你可能会将this
作为参数传递给函数或需要引用回调用对象的东西。
答案 4 :(得分:0)
如何开始使用this
关键字,首先,它可以帮助您快速识别代码中的变量local或global(方法或类所有)。您只需要一段代码就可以看到this
,然后立即意识到这是一个全局可见的类变量,而不是为目标定义添加额外的滚动。