:
AS3でObjectへの変数参照は、基本型(Strings、Numbers、int、およびBooleans)を除いて常にポインタです。これらは常にバイナリのみです。
そうでは、基本的なタイプのために、あなたは「値による」動作を取得:
var a:String = "hello";
var b:String = a; // b is a new String, a clone of a
b += " world";
trace(a); // hello
trace(b); // hello world
Bへの変更は、変数を変更しませんでした。あるいは、aとbが2行目以降の同じStringへの参照であると言えるかもしれませんが、+ =演算子は新しいStringを作成してbに代入します。 String documentationを見ると、実際にStringをインプレースで変更するメンバー関数はなく、新しいStringをすべて返すことに注意してください。
あなたは機能と同じ動作が単純で、非ポインタパラメータで呼び出して表示されます:
function wont_modify(word:String):String
{
word += " world";
return word;
}
var a:String = "hello";
trace(wont_modify(a)); // hello world
trace(a); // hello
はしかし、非単純型のため、アクセスはによって参照され(ポインタと呼ばれるもの他の言語で):あなたは文字列のような単純なタイプの「ポインタのような」行動をしたい場合は
var a:Array = [1, 2, 3];
var b:Array = a; // b is now a reference to a
b.push(4);
trace(a); // [1, 2, 3, 4]
trace(b); // [1, 2, 3, 4]
、それはあなたの周りの参照を通過するため、ポインタのようなオブジェクトのメンバーである必要があります。
function will_modify(obj:Object):void
{
obj.a += " world";
}
var obj:Object = { a:"hello" }
will_modify(obj);
trace(obj.a); // hello world
実際にStringとNumbersは実際にObjectを拡張しますが、すべての演算子と関数呼び出しは参照によってではなく値で扱います。
+1お返事ありがとうございます。 – Vishnu