Estoy escribiendo un código de Actionscript3 que intenta aplicar un método a un objeto que se determina en tiempo de ejecución. La documentación AS3 para Function.apply y Function.call ambos indican que el primer argumento para esas funciones es el objeto que se usará como el valor 'this' cuando se ejecuta la función.Function.apply no usa este parámetro de arg
Sin embargo, he encontrado que en todos los casos cuando la función que se ejecuta es un método, el primer parámetro para aplicar/llamar no se usa, y 'esto' siempre se refiere al objeto original al que se vinculó ese método. Aquí es un código de ejemplo y su salida:
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);
}
}
de salida:
A
B
A
A
una modificación menor para el código anterior para crear una función anónima en línea que hace referencia a 'esto' muestra que la correcta El comportamiento se produce cuando la función que se está aplicando/llamando no es un método vinculado.
¿Estoy usando aplicar/llamar incorrectamente cuando intento usarlo en un método? La documentación AS3 proporciona específicamente código para este caso, sin embargo:
myObject.myMethod.call(myOtherObject, 1, 2, 3);
Si este es roto, ¿hay alguna solución alternativa además de hacer los métodos de destino en funciones (que sería bastante feo, en mi opinión)?
Voy a tener que decir que estás haciendo algo extremadamente incorrecto si necesitas este tipo de codificación. ¿Qué estás tratando de lograr exactamente al hacer esto? –
Probado en mi extremo. parece un error. Intente buscar en JIRA: http://bugs.adobe.com/jira/browse y si no lo encuentra, envíelo – divillysausages
no es un error de idioma, pero la documentación mal escrita –