调用函数时是否可以忽略变量? (ActionScript3)

Is it possible to ignore a variable when calling a function ? (ActionScript3)

我有一个点击按钮时触发的功能。

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?

可行,但您需要显式检查 null 才能这样调用它。事实上,常见的 init() 函数称为 "other way" 并声明为 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 字段,则要求两个对象都不是 null。

第一个答案当然是可行的,也是我过去所做的,但现在我通常遵循一种模式,我只是将它分离到另一个函数中,并根据需要调用任何一个。

像这样:

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");

那么我真的不需要怀疑(在将来重新访问它时)为什么会有空检查。