今日收获:
1.自定义的 元件类, 声明一个对象后,可以获取到这个对象内包含的 名称 ,属性等。如:
mcInfo 类是一个自定义元件类,这个元件里有 关闭按钮 ,文本等,使用如下:
var info:mcInfo = new mcInfo ();
info.getChildByName("txt").width = 100//赋值 元件内的 txt属性
info.getChildByName("close").x = 50//赋值 元件内的 关闭按钮 X坐标属性
2.参数传递参数 问题:在定义事件类型的时候,采用.addEventListener(Event,func);有时候经常需要对func传递参数。方法有
A. btn.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void{.........}) 形式
{......} 语句里面可以写调用的函数 exafunc(arg1,arg2,...);或者直接写一些语句,如trace(e) 等等.
B.采用代理函数 如可以声明一个类 Delegate()代理类,这个类里可以定义一个函数 用于接收 来自事件的相应。如
Delegate 类(代理类)
package {
public class Delegate {
public static function create(_arg1:Function, ... _args):Function{ //调用入口
return (createWithArgs(_arg1, _args));
}
private static function createWithArgs(_arg1:Function, _arg2:Array):Function{ //调用内部函数
var func:Function = _arg1;
var args:Array = _arg2;
var f:Function = function (){ //定义一个函数,用于返回函数对象
var func1:Function = arguments.callee.propfunc ; //赋值当前调用函数对象(引用)的属性 (createWithArgs函数 引用的属性)
var args:Array = arguments.concat(args); //赋值参数
return (func1.apply(null, args));//由于 apply()
是 Function 类的方法,所以它也是 ActionScript 中每个Function 对象的方法。 返回被调用函数指定为返回值的值 (args作为参数传递给func1)
}
f["propfunc "] = func; //或者f.propfunc = func //自定义一个 f(Function 对象)的属性 并赋值为 func(_arg1:传递的函数对象参数. )
return (f); //返回函数对象,这样 传递的函数对象 _ arg1 就带上了传递的参数
}
}
}
调用方法如下:
btn.addEventListener(MouseEvent.CLICK, Delegate.create(showMsg, "测试字符串1","测试字符串2");//可以传递多个参数
//定义showMsg
private function showMsg(_arg1:MouseEvent, _arg2:String, _arg3:String):void{
trace(_arg2);
trace(_arg3);
}
注:红色字体要保持一致。 是函数对象的属性。这个地方比较绕。
var func1:Function = arguments.callee.propfunc //: 是当前函数调用的属性 赋值给 var func1:Function 函数对象
f["propfunc "] = func // 函数对象的属性等于 传递的参数 函数对象。
所以,func1.apply(null, args));//这样的调用才会成功,定义的函数的属性 等于 传递的参数 函数对象,所以参数也就赋给传递的函数对象了。
如有问题,再纠正....