「this」参照について少しでも言及するためにインターネットを上下に検索しましたが、何も見つかりませんでした!!! 「これ」については誰も話していないようです。私は経験豊富な C++ プログラマーなので、'this' ポインター/参照の概念に精通しています。私の質問は、as3 クラスの「this」参照とは正確には何ですか? 編集しようとすると、コンパイラ エラーがスローされます。それを別のクラスインスタンスに割り当てると、「これ」が「指す」もののコピーが作成されるようです。それを識別しようとするすべての試みは、通常の変数クラスのインスタンスと区別がつかないことを示しています。私の最終的な目標は、クラス インスタンスを別のインスタンスにポイントすることです。プロセスを簡素化するために「これ」を使用できるかどうかを判断しようとしています。ありがとう!
3 に答える
これは、クラスの INSTANCE への参照です。これは、何よりも利便性と明確さのためです。つまり、コードヒントに簡単にアクセスできるようにし、アクセスしようとしているプロパティ/メソッドを明示的に示します。これは予約語なので、他の目的には使用できません。
次のようなクラス プロパティと同じ名前の引数を取るメソッドで非常に便利です。
package
{
public class MyClass
{
private var stuff:String;
public function MyClass()
{
}
public function setStuff(stuff:String):void
{
this.stuff = stuff;
}
}
}
this.stuff はインスタンス プロパティを参照し、 stuff は渡されたメソッド引数を参照します。これがないと、stuff への参照があいまいになり、クラス プロパティを引数に設定する必要があることをコンパイラが認識できなくなります。
package
{
public class MyClass
{
private var stuff:String;
public function MyClass()
{
}
public function setStuff(stuff:String):void
{
stuff = stuff; //NO this KEYWORD!
}
}
}
引数をそれ自体に設定するだけで、何も起こりません。
多くの人は、これを使用すると雑然とした醜いコードが作成されると感じています。個人的にはかなり使っていますが、それは個人的な好みの問題であり、チーム/プロジェクトが同意した慣習の問題です。
これを別のクラスに再割り当てすることはできません。
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"
簡単なグーグルは私にこれらを与えます:
http://www.adobe.com/support/flash/action_scripts/event_methods/event_methods05.html
http://www.daveoncode.com/2009/01/07/we-should-always-use-actionscripts-this-keyword/
メソッドがオンになっているオブジェクトの現在のインスタンスを参照するだけです。