as3类中的'this'引用究竟是什么?

时间:2009-09-01 20:32:23

标签: flex actionscript-3 reference class this

我在互联网上上下搜索,即使是最轻微的提及“这个”参考,也发现没有!似乎没有人谈论'这个'。我是一位经验丰富的c ++程序员,所以我对'this'指针/引用的想法非常熟悉。我的问题是as3类中的'this'引用究竟是什么?尝试编辑它会引发编译器错误。将它分配给另一个类实例似乎复制了“this”指向的内容。我对ID的所有尝试都表明它与普通变量类实例无法区分。我的最终目标是将一个类实例指向一个不同的实例,我一直在努力确定我是否可以通过'this'来简化该过程。谢谢!

3 个答案:

答案 0 :(得分:2)

简短的回答是:否。您将无法重新使用this指向同一班级的其他实例。

AS3中的this关键字的行为方式与C#中的相同:在类中使用时,它始终引用对象的当前实例。

public class Cat
{
    var name:String = "";

    public function getName():String
    {
        return this.name;
    }

    public function setName(name:String):void
    {
        this.name = name;
    }
}

var joe:Cat = new Cat();
joe.setName("Joe"); //joe.getName() will return "Joe"

var john:Cat = new Cat();
john.setName("John"); //john.getName() will return "John"

答案 1 :(得分:2)

这是对班级实例的引用。它实际上是为了方便和清晰 - 它允许轻松访问代码提示并明确说明您尝试访问的属性/方法。这是一个保留字,因此您不能将其用于其他目的。

对于采用与类属性同名的参数的方法非常方便,例如:

package
{
    public class MyClass
    {
        private var stuff:String;

        public function MyClass()
        {
        }

        public function setStuff(stuff:String):void
        {
            this.stuff = stuff;
        }
    }
}

this.stuff指的是实例属性,而stuff指的是已经传入的方法参数。如果没有这个,你会有一个不明确的东西引用,编译器不会知道你想要将类属性设置为论证。

package
{
    public class MyClass
    {
        private var stuff:String;

        public function MyClass()
        {
        }

        public function setStuff(stuff:String):void
        {
            stuff = stuff; //NO this KEYWORD!
        }
    }
}

只会将参数设置为自身,不会发生任何事情。

许多人认为使用它会造成混乱的丑陋代码。就个人而言,我使用它很多,但这是个人品味和团队/项目同意的惯例。

你无法将其重新分配给另一个班级。

答案 2 :(得分:0)