2014-10-03 50 views
0

在剖析某些AS3代碼時,我已經在Flash Pro CS6中給出了,我注意到其中一個類從未被聲明或實例化,但它被訪問,與導入語句相同的名稱。例如:自動實例化在Actionscript 3導入時發生的自定義類Flash Pro

import records; //package file records.as 
//Import instantiates records and it is usable! 

records.zip = "12345"; 
trace (records.Zip, " ", records.Name); //this works 

//I thought this was always necessary 
var r : records = new records(); 
r.init_records(); 

我注意到,這個變量「記錄」在其他幾類進口大量訪問,所以我想知道這是很好的做法,或打開出錯?如果你知道一個,你可以指向一個描述這個「特徵」的資源。我知道,閃存不會讓我聲明如下,如果我想繼續保持命名爲「記錄」類和訪問它作爲一個變量「記錄」:

var records : records = new records(); 

它只是似乎很奇怪,我,我要確保隨着我進一步發展,代碼非常健壯。

最後,它會出現在系統中後,下面的代碼是爲了復位「記錄」變量:

import records; //package file records.as 
var new_records : records = new records(); 
new_records.init_records(); 

再次是進口records.as要重置該自動實例變量?或者將聲明和調用init_records()對一個新的實例(這是從未引用此點後,它回去引用'記錄')將重置默認實例嗎?

+0

你能幫我理解你的問題更好一點..你問你是否應該使用單例類,靜態類或普通類? 導入類不會重新實例化類,它只允許腳本/框架訪問該類。 – Zze 2014-10-03 07:28:22

+0

顯然,通過一些更深入的研究,這是一種在整個代碼中創建和使用全局變量的方法。您可以導入.as文件(技術上,您甚至不必使用導入語句,只需將其包含在編譯列表中),並只需通過類本身的名稱引用類內容即可。我想知道的是(1)再次導入類是否運行構造函數,從而修改所有現有的全局變量,以及(2)創建該類的第一個實際實例是否對全局變量版本有任何影響的班級? – s1972 2014-10-03 18:57:33

回答

0

看起來像某人正在使用記錄類作爲存儲全局變量的全局對象。這個類應該是一個單例,所以在項目中只有一個實例,但是在系統後面發現了一個實例化的地方,這在設計模式中是失敗的。

+0

謝謝,這是有道理的。我最終想到的全局部分,但實例化成一個從未使用過的變量讓我覺得很奇怪。我猜測再次導入一個類作爲靜態全局對象可能會再次運行構造函數,並且(在這個代碼的情況下)將所有變量重置爲默認值。但我必須先測試它。 – s1972 2014-10-05 18:28:58