AS3.0关于变量作用域的问题

[code]importflash.text.TextField;bb.addEventListener(MouseEvent.CLICK,onclick);functi... [code]import flash.text.TextField;

bb.addEventListener(MouseEvent.CLICK,onclick);
function onclick(e):void{
var mytext:TextField=new TextField();
mytext.text="hello";
addChild(mytext);
}
pp.addEventListener(MouseEvent.CLICK,remover);
function remover(e):void{
removeChild(mytext);
}[/code]
bb和pp是两个按钮,现在要实现点bb创建一个文本框,点pp移除文本框,我这么做显然是因为mytext在remover()方法里不可见,那么请问:
1、如何克服这个问题,实现这种功能。
2、推广,由函数里面new出来的东西addChilid之后怎么removeChild。

感谢各位看帖者。
展开
 我来答
zb6306
2012-04-08 · TA获得超过777个赞
知道大有可为答主
回答量:2585
采纳率:66%
帮助的人:1169万
展开全部
变量从AS3.0开始,就没有真正的全局变量了,有的只是相对的全局变量与局部变量,它是针对不同的域来说的,打个比方说吧,在类中有类的全局变量与局部变量,在当前时间轴上有当前时间轴的全局变量与局部变量,要想在当前域中任意地方调用变量只能声明当前域的全局变量,这样就可以任意调用了,在函数创建的实例,只要赋值给当前域的全局变量,就可以任意调用以及任意删除了。现在来说说new出来的东西addChild后,如何removeChild了,其实无论是addChild还是removeChild都是针对显示容器来说的,没有了显示容器,自然就没了这两个东西了。因此无论你是通过函数创建的还是直接创建的,都存在一个你这个显示对象添加到哪里的问题,添加到哪里,就从哪里删除,就这么简单。
从你的脚本来看,主要问题就是因为把变量声明为局部变量了,随着函数的生命终结,变量也完成了使命。所以你应该在最开始就定义变量,然后在函数中赋值,就可以解决问题了。
就是这句
function onclick(e):void{
var mytext:TextField=new TextField();
mytext.text="hello";
addChild(mytext);
}
修改成
var mytext:TextField;
function onclick(e):void{
mytext=new TextField();
mytext.text="hello";
addChild(mytext);
}
上海德康电子
2023-06-12 广告
ALPS Bluetooth 模块是一种支持蓝牙协议的无线通信模块,通常用于连接蓝牙设备,如手机、耳机、音箱等。ALPS Bluetooth 模块有多种类型,其中包括:1. UGZZC-G 车载用Bluetooth模块:这是一种内置蓝牙协议... 点击进入详情页
本回答由上海德康电子提供
boololo
2012-04-07 · TA获得超过779个赞
知道小有建树答主
回答量:463
采纳率:0%
帮助的人:200万
展开全部
好多啊
追问
好多什么?好多方法?说一个?= =。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式