2011-10-25 54 views
0

林添加很多簡單的功能,頂級的對象(對象,數組,字符串...)的原型,並有2個問題:添加功能的playerglobal.swc或允許編譯器將自身的功能

可能在編譯時將函數添加到頂層的類中?

如果不是,有沒有辦法讓這個函數編譯? 我不喜歡關閉嚴格的模式,我嘗試和它不是一個好主意。

例如:

string.removeWhiteSpace(); 
string.sliceStr("." , "end"); 
textField.scrollBottom(); 

這個返回編譯時錯誤,原因是沒有這樣的功能,我必須把它寫在括號:

string["removeWhiteSpace"](); 
string["sliceStr"]("." , "end"); 
textField["scrollBottom"](); 

,我喜歡aviod吧)

+0

編輯您的代碼,以便它正確顯示 –

回答

1

您找到了解決此問題的正確方法。在AS3中混淆原型是一種黑客攻擊,所以你需要黑客技術才能使其工作。

另一種方法是在調用方法之前將字符串和數組轉換爲Object

一個更好的辦法是使用頂級對象的原型不亂和實施的實用工具類,如Adobe那樣 - StringUtil,ArrayUtil等

+0

我與原型工作很長時間,從來沒有任何問題,只是這是我寫的問題,現在即時通訊調用乞求功能,添加到原型的所有功能,然後我運行其餘代碼。 – turbosqel

+2

沒有這樣的功能,使用AS3中的原型完全無法工作。不過,我想知道你爲什麼絕對想要使用原型?它會讓你的生活變得更加困難,你的代碼被黑客混淆,並且可能會變得更慢,而且你不會從編譯時檢查中受益。使用公用事業班會更高效,更乾淨。 –

+0

我不知道爲什麼你認爲原型中的函數可能會比較慢並且會被黑客攻擊。關於編譯時檢查 - 這就是我所要求的,可以將這個函數添加到playerglobal.swc或其他任何方式...... – turbosqel

1

String類使用屬性「final」,這意味着它不能被覆蓋。
因此,要回答你的問題,不管怎樣,你都不能重寫它。
這通常是針對性能問題在頂級課程上完成的。
對象類使用屬性類型「dynamic」 所有不聲明顯式基類的類都擴展內置Object類。

Array類也使用「動態」

至於你的例子。

string.removeWhiteSpace() 

你可以做

string.split(" ").join('') 

這將實現你在找什麼。

+0

沒有,你完全以不明白我的意思:]以白色空間爲例。 我知道我不能重寫字符串,爲什麼即時通訊添加功能的原型,並要求其他方式來做到這一點。 – turbosqel