0

这是我想创建具有鼠标悬停效果的按钮时必须使用的示例:

    this.buttonExample.buttonMode = true;
    this.buttonExample.useHandCursor = true;
    this.buttonExample.addEventListener(MouseEvent.CLICK,myaction);

我是 AS3 的新手-有什么办法可以像这样简化此代码:

    this.buttonExample.buttonMode = true;.useHandCursor = true;.addEventListener(MouseEvent.CLICK,myaction);

为什么它不起作用?

4

4 回答 4

4

它已经很简单了。首先

this.buttonExample.buttonMode = true;
this.buttonExample.useHandCursor = true;
this.buttonExample.addEventListener(MouseEvent.CLICK,myaction)

比可读性强得多

this.buttonExample.buttonMode = true;.useHandCursor = true;.addEventListener(MouseEvent.CLICK,myaction);

始终追求可读性胜过其他任何事情。其次,

this.buttonExample.buttonMode = true; 

不返回对象,因此您无法与任何东西交互。

于 2010-05-07T10:47:30.593 回答
4

如果您经常使用该模式,则可以创建一个辅助函数:

public function setAsButton(button:Sprite, clickHandler:Function):void {
  button.buttonMode = button.userHandCursor = true;
  button.addEventListener(MouseEvent.CLICK, clickHandler);
}

然后在某处调用它:

setAsButton(this.buttonExample, myaction);
于 2010-05-07T10:48:22.153 回答
3

如果您觉得this.buttonExample一遍又一遍地输入太重复,只需将该对象分配给一个变量并在其余语句中使用该变量:

var b : Button = this.buttonExample;
b.buttonMode = true;
b.useHandCursor = true;
b.addEventListener(...);

正如其他人所提到的,还有with声明,但不鼓励使用它,因为它使代码更难阅读,并可能导致奇怪的结果:

with (this.buttonExample) {
  buttonMode = true;
  useHandCursor = true;
  addEventListener(...);
}

当然,您可以将这些建议与其他技巧结合使用,例如链接分配:

var b : Button = this.buttonExample;
b.buttonMode = b.useHandCursor = true;
b.addEventListener(...);

如果分配的值是不可变的(例如,数字和字符串,但不是数组或大多数其他对象),请非常小心地仅以这种方式链接分配,因为相同的对象将分配给左侧的所有变量。如果该值是不可变的,这无关紧要,但如果它是可变的,您最终可能会得到奇怪的结果,如下例所示:truefalse

 a = b = [ ];
 a.push(1);
 b.push(2);
 trace(a); // outputs 1, 2
 trace(b); // also outputs 1, 2

产生这个结果的原因是aandb都引用了同一个数组,并且由于数组是可变的,因此无论您如何访问对象都没有关系,它仍然会被更改。a并且b不要仅仅因为它们是不同的变量而引用不同的数组。

您可能认为您可以执行以下操作,但它不会起作用。

// this will NOT work
var b : Button = this.buttonExample;
(b.buttonMode = b.useHandCursor = true).addEventListener(...);

b.buttonMode = b.useHandCursor = true,而不是添加的原因.addEventListener(...)是赋值表达式(例如b.buttonMode = true)的值是分配给左侧的值(例如true)。如果您添加.addEventListener(...)它,您实际上是在说true.addEventListener(...),这显然不是您想要的。换句话说

b.buttonMode = b.useHandCursor = false;

相当于

b.useHandCursor = false;
b.buttonMode = b.useHandCursor;

希望这也应该使上面提到的警告变得清晰。

于 2010-05-07T11:25:17.787 回答
0

你可以使用with语句。但是我不鼓励你这样做,因为它会导致很多歧义和不清楚。

此外,您可以有多个作业:

this.buttonExample.buttonMode = this.buttonExample.useHandCursor = true;

这有时很有用,但为了便于阅读,你不应该过度使用它。

问候
back2dos

于 2010-05-07T10:51:59.410 回答