2015-12-31 57 views
1

我正在嘗試編寫調試工具,我希望能夠獲取調用者的類名稱。基本上,來電顯示。是否可以從函數內部獲取類或類名?

所以,如果我有一個方法,像這樣的,我想要得到的類名:

public function myExternalToTheClassFunction():void { 
    var objectFunction:String = argument.caller; // is functionInsideOfMyClass 
    var objectFunctionClass:Object = argument.caller.this; 
    trace(object); // [Class MyClass] 
} 

public class MyClass { 

    public function functionInsideOfMyClass { 
     myExternalToTheClassFunction(); 
    } 
} 

有沒有這樣的事情在JavaScript或ActionScript3的? FYI AS3基於並且在大多數情況下與JS可互換。

+1

看看http://stackoverflow.com/questions/1249531/how-to-get-a-javascript-objects-class,可能有幫助 –

+1

Javascript沒有'public function'或類型聲明之後變量。 – Barmar

+0

@Barmar是的,你可以忽略這些。我想要得到的是調用者從該類的外部函數中獲得的類。 –

回答

0

the documentation摘自:

與ActionScript,ActionScript 3.0中的早期版本中沒有 arguments.caller財產。要獲取 稱爲當前函數的函數的引用,您必須將該函數的引用作爲參數傳遞給該函數。這種技術的一個例子可以在 中找到arguments.callee的例子。

ActionScript 3.0包含一個新的...(rest)關鍵字,建議使用 而不是參數類。

嘗試通過Class名作爲參數:

類代碼:

package{ 

    import flash.utils.getQualifiedClassName; 

    public class MyClass { 

     public function functionInsideOfMyClass { 

      myExternalToTheClassFunction(getQualifiedClassName(this)); 

     } 

    } 

} 

外部代碼:

public function myExternalToTheClassFunction(classname:String):void { 

    trace(classname); // MyClass 

} 
+0

僅供參考我嘗試將'this'傳遞給靜態方法並拋出錯誤。如果我創建一個變量'var object:Object = this;'並傳遞'object'但沒有運行它,似乎不會引發任何編譯器錯誤。 –

+1

是的,這是預期的行爲。看看這個鏈接並搜索靜態方法部分。 http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f30.html – ElChiniNet

1

對於您可以創建一個調試的目的錯誤然後檢查堆棧跟蹤:

var e:Error = new Error(); 
trace(e.getStackTrace()); 

爲您提供:

Error 
    at com.xyz::OrderEntry/retrieveData()[/src/com/xyz/OrderEntry.as:995] 
    at com.xyz::OrderEntry/init()[/src/com/xyz/OrderEntry.as:200] 
    at com.xyz::OrderEntry()[/src/com/xyz/OrderEntry.as:148] 

你可以從那裏解析出 「來電顯示」 的方法。

請注意,在某些非調試案例中getStackTrace()可能會返回null

相關問題