我有一个单击按钮时触发的功能。
function button_clicked(event:MouseEvent):void
{
mySharedObject.data.curr = event.currentTarget;
mySharedObject.data.curr.background = true;
mySharedObject.data.curr.backgroundColor = 0xFEDCA2;
boxText.text = "this is some text";
}
现在,我想以另一种方式调用此函数(当用户执行除单击按钮之外的操作时)。
所以我做到了:
button_clicked(null);
它正在工作,但事实是,以这种方式调用时不需要mySharedObject.data.curr
。 (因为它会产生错误。使用其他方式时currentTarget
不存在,因此也不存在)。我只需要boxText.text(以及我要添加的其他内容)
在调用button_clicked
时,是否可以忽略函数中的mySharedObject.data.curr?
答案 0 :(得分:1)
可行,但您需要显式检查null才能这样调用。实际上,常见的init()
函数被称为“其他方式”,并被声明为function init(e:Event=null):void
,但是该参数被忽略。您立即从传递的事件中请求了某些内容,因此无法使用null参数调用函数。在这种情况下,您可以通过简单的if检查将请求平包装到mySharedObject
。
function button_clicked(event:MouseEvent):void
{
if (event && event.currentTarget) {
mySharedObject.data.curr = event.currentTarget;
mySharedObject.data.curr.background = true;
mySharedObject.data.curr.backgroundColor = 0xFEDCA2;
}
boxText.text = "this is some text";
}
如果有人(您在其他地方)想要调用可能没有填充其button_clicked(new Event("dummy"))
字段的currentTarget
,则要求两个对象都不为空。
答案 1 :(得分:1)
第一个答案当然是可行的,而且我曾经做过,但是现在我通常遵循一种模式,将其分离为另一个函数,然后根据需要调用其中一个。
类似这样的东西:
function button_clicked(event:MouseEvent):void {
mySharedObject.data.curr = event.currentTarget;
mySharedObject.data.curr.background = true;
mySharedObject.data.curr.backgroundColor = 0xFEDCA2;
setBoxLabel("this is some text");
}
function setBoxLabel(inputText:String){
boxText.text = inputText;
}
// can manually call as needed
setBoxLabel("this is some text");
然后,我真的不需要怀疑(以后再重新讨论)为什么存在空检查。