2010-11-24 69 views
0

我正在設計一個flash網站,並且我將其設計爲面向對象。我有很多課程,而且我很難從其他課程獲取信息(變量)。用於actionscript的'SuperGlobal'OOP變量?

要做到這一點,我通常包括我的類的函數(或構造函數)的參數變量或者創建自定義事件對象,將變量輸送到其他類(偵聽它們)。這種方法很慢。

我知道有(誰是聲明的函數內部,只適用於該功能的)局部變量和全局變量(誰聲明一個類爲私有或公有內,並在該類中可用)。我能否以某種方式創建一些可用於整個閃存程序的「超全局」變量?

如果沒有,就你們知道的方式在一個面向對象的設計以及變量傳遞?

謝謝!我將嘗試實現一個單例。

+0

解釋靜態類在我的答案。 – 2010-11-24 18:18:54

回答

0

Singleton類:

package { 

    public class SingletonDemo { 
     private static var instance:SingletonDemo; 
     private static var allowInstantiation:Boolean; 

     public static function getInstance():SingletonDemo { 
     if (instance == null) { 
      allowInstantiation = true; 
      instance = new SingletonDemo(); 
      allowInstantiation = false; 
      } 
     return instance; 
     } 

     public function SingletonDemo():void { 
     if (!allowInstantiation) { 
      throw new Error("Error: Instantiation failed: Use SingletonDemo.getInstance() instead of new."); 
      } 
     } 
    } 
} 

我想我現在就買下。謝謝!

0

通常一個做到這一點與持有一些變數,到處都可以使用一個單獨的類。例如,創建一個名爲「Environment」,「Settings」或「Program」的類,該類包含一些靜態變量,然後每個類都可以通過Settings.soundIsMuted訪問這些類。

+0

哇。從來沒有想到這一點。靜態類是不使用構造函數的類?另外,你認爲我應該這樣做,現在我的網站是先進的?這些變量只是「公共變量x」嗎? – Loop 2010-11-24 17:20:24

+0

你能指點我一個教程嗎?我知道模糊地開始使用單身。 – Loop 2010-11-24 17:27:13

2

不必像單身東西。該解決方案很簡單:

package sg { 
    public class SuperGlobal { 
     public static var vars:Array = new Array(); 
    } 
} 

無論你是在你的代碼,你可以訪問瓦爾陣列與此:

sg.SuperGlobal.vars["test"] = "Hello World!"; 

// somewhere else: 
trace(sg.SuperGlobal.vars["test"]); // Hello World!