2012-01-24 42 views
2

是否有指針或類似於as3的概念?一個類似於as3中指針的概念?

我用的

var mc1:MovieClip; 
var mc2:MovieClip(); 
var mcCommon:MovieClip = new MovieClip(); 
mcCommon["myptr"] = mc1; 
mcCommon["myptr"] = mc2; 

一個概念,我會在哪裏去閱讀和了解這個概念。我想獲得簡單的答案,因爲我不是as3的專家。我還在學習。

回答

2

如果你是專門詢問的代碼,首先它應該是這樣的:

var mc1:MovieClip; 
var mc2:MovieClip; 
var mcCommon:MovieClip = new MovieClip(); 
mcCommon["myptr"] = mc1; 
mcCommon["myptr"] = mc2; 

雖然兩個MC1和MC2實際上是零。

語法mcCommon [「myptr」]表示您在MovieClip mcCommon上創建名爲「myptr」的屬性。因此,您以後可以使用mcCommon [「myptr」]檢索此屬性的內容。最後一行實際上會覆蓋該屬性的內容(如果它當然不爲空)。你可以這樣做,因爲MovieClip類是動態的。在其他(非動態)實例上,您不能創建像這樣的屬性。

+0

+1謝謝你的回覆。 – Vishnu

1

雖然不是一回事,但我認爲你要找的是Dictionary,其中集合中的每個屬性都有一個String作爲可以通過它訪問的關鍵字。

+2

不完全是:您可以使用非字符串鍵。 – AsTheWormTurns

8

我還沒有專門使用指針在一段時間語言編碼,我不知道這正是你在問什麼,但在這裏是在回答你的問題的嘗試:

在AS3 ,對象的變量引用始終是指針,除基本類型(字符串,數字,整數和布爾值)之外,它們始終只是按值。

因此,對於基本類型,你會得到一個「按值」的行爲:

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行之後的同一個字符串的引用,但是+ =運算符創建了一個新的字符串並將其分配給了b。如果您查看String documentation,請注意,沒有一個成員函數實際修改字符串,它們都返回新的字符串。

你會看到相同的行爲與功能簡單,非指針調用的參數:

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 

字符串和數字實際上確實擴展了Object,但所有的操作符和函數調用都將它們視爲值而不是通過引用。

+0

+1作爲有關參數傳遞參考的答案。謝謝 – Vishnu