Sto scrivendo un codice Actionscript3 che tenta di applicare un metodo a un oggetto determinato in fase di esecuzione. La documentazione AS3 per Function.apply e Function.call indicano che il primo argomento di tali funzioni è l'oggetto che verrà utilizzato come valore "this" quando viene eseguita la funzione.Function.apply not using thisArg parameter
Tuttavia, ho riscontrato che in tutti i casi in cui la funzione eseguita è un metodo, il primo parametro da applicare/chiamare non viene utilizzato e "questo" fa sempre riferimento all'oggetto originale a cui è stato associato quel metodo. Ecco alcuni esempi di codice e la sua uscita:
package
{
import flash.display.Sprite;
public class FunctionApplyTest extends Sprite
{
public function FunctionApplyTest()
{
var objA:MyObj = new MyObj("A");
var objB:MyObj = new MyObj("B");
objA.sayName();
objB.sayName();
objA.sayName.apply(objB, []);
objA.sayName.call(objB);
}
}
}
internal class MyObj
{
private var _name:String;
public function MyObj(name:String)
{
_name = name;
}
public function sayName():void
{
trace(_name);
}
}
uscita:
A
B
A
A
una piccola modifica al codice sopra per creare una funzione in linea anonima che si riferisce a 'questo' mostra che la corretta il comportamento si verifica quando la funzione applicata/chiamata non è un metodo associato.
Sto usando apply/call errato quando tento di usarlo su un metodo? La documentazione AS3 prevede, in particolare il codice per questo caso, però:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
Se questa è infatti rotto, c'è qualche lavoro-around oltre a rendere i metodi di destinazione in funzioni (che sarebbe abbastanza brutto, a mio parere)?
Devo dire che stai facendo qualcosa di estremamente sbagliato se hai bisogno di questo tipo di codifica. Cosa stai cercando di ottenere esattamente facendo questo? –
Testato da parte mia. sembra un insetto Prova a cercare in JIRA: http://bugs.adobe.com/jira/browse e se non lo trovi, invialo a – divillysausages
non è un bug di lingua, ma documentazione scritta male –