簡體   English   中英

在AS3中,如何將對象的內容作為函數的參數傳遞?

[英]In AS3, how would I pass the contents of an object as arguments for a function?

例如,我有一個功能:

function doSomething( a:String, b:Number, c:Array ):void {
  trace( a + b + c.toString() );
}

…並且我有一個對象,其中包含我想傳遞參數的所有元素:

var args:Object = { 'dog', 11, myArray };

…而且我希望能夠將args的內容傳遞給doSomething,而無需對doSomething進行任何更改(假設這是其他人的功能),並且我想以一種不假定自己會了解任何有關方法的方式來進行操作args的內容。

這可能嗎?

您是Python開發人員嗎? ;)

您必須將args:Object轉換為args:Array,然后調用doSomething.apply(this,argsArray)。 這里的問題是,您的args:Object中的參數未排序,因此循環遍歷它們以將它們轉換為數組以傳遞給apply()不會導致可預測的參數序列。

除非您有策略在對象到數組的轉換中強制執行正確的屬性順序,否則這聽起來像是行不通的。

您要使用的是Function.apply() 為此,您需要將“ args”對象從您的示例更改為數組。

然后,您將構造如下對象:

var myObject:Object = { command: doSomething, args: [ "dog", 11, myArray ] };

其中command是對要調用的函數的引用,而argscommand所需的參數列表。 然后,調用doSomething

myObject.command.apply(this, myObject.args)

另外一個好處是,它可以與帶有任意數量參數的任何函數一起使用,您所需要做的就是更改myObject commandargs的值。 因此,您可以傳遞符合這些規則的對象列表並遍歷它們,而無需更改任何代碼。

您應該將對象值傳遞為

var args:Object = { a:'dog', b:11, c:myArray };
function doSomething( args.a, args.b, args.c );

編輯:對了,我現在添加了另一個方法,該方法可以采用任何形式的任意數量的參數。 從本質上講,它將為您提供要處理的參數數組。

private var _testObject:Object;

private function init():void{
    _testObject = {str:"test", num:11, arr:["test","array"]};
    doSomething(_testObject.str, _testObject.num, _testObject.arr);
}

private function doSomething(...args):void{
    trace(args.toString());
}

當然,這需要在類或腳本標記中,但是如果調用init方法,則應該看到以下跟蹤:test,11,test,array

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM