在ActionScript中的几个变量名中看到的_的重要性是什么?

时间:2009-07-08 15:13:00

标签: actionscript

我是动作脚本的新手,我注意到动作脚本中的许多变量名都以_开头,我想知道它的意义是什么?

7 个答案:

答案 0 :(得分:3)

Actionscript中的私有变量往往在它们前面有一个_。然后你有没有_的getter / setter给他们公开访问。

答案 1 :(得分:2)

您可能正在使用naming convention。从语言的角度来看,没有特别的意义。

答案 2 :(得分:2)

确实如此,在JavaScript中,人们使用_来表示“不要触及这个值”,因为在JavaScript中控制访问级别非常棘手......使得变量真的无法从外部访问是非常痛苦的a ** ......

在ActionScript 2.0和1中,绝对没有规则......:D ...例如在类MovieClip中,在ActionScript 2.0中,您有_x和{{}等属性1}} ...但最好的是_y vs focusEnabled,两个布尔值,一个确定,剪辑是否可以聚焦,另一个是否有黄色矩形,聚焦时......

要么这与来自flash播放器内部的一些内容有关,要么只是随机的...请注意_focusrect_global_root除此之外它只显示在_accPropsTextFieldMovieClip的属性上...

Button(两个下划线)表示flash播放器中的魔法...... __是一种非常神奇的方法...... __resolve是一个神奇的属性,如果你愿意的话......而且,到处都不是很一致......

现在谈到ActionScript 3.0时,整个API都没有使用任何下划线......包括我在内的很多人选择用__proto__privateprotected变量来表示internal$ s ...但这是一个完全随意的命名约定,应该使代码可读并防止命名冲突......

格尔茨

back2dos

答案 3 :(得分:2)

可以写

class Hello{
  private var x:Number;
  public function get x():Number{...}
  public function set x(value:Number):void{...}

  protected var y:Number;
  public function get y():Number{...}
  public function set y(value:Number):void{...}
}

但是每次你从类或子类中访问它们时,你都需要指定你的意思,因为它们具有相同的名称(这是可能的,因为它们在不同的名称空间中)。这看起来像

var before:Number = private::x;

或使用getter:

var before:Number = public::x;

对于受保护的变量,这甚至可以在所有子类中继续...

不喜欢下划线的人可以使用任何其他语法来使名称唯一,例如c#中的吸气剂和二传手的首字母。

答案 4 :(得分:1)

在Actionscript 2.0中,_variable意味着它是对象的内置属性。但是,在3.0发布之前我停止使用Actionscript,所以我知道,它可能已经改变为3.0。

答案 5 :(得分:1)

简单 - _ {您的变量名称}表示它是私有的。

在AS3中,您可以定义像

这样的getter和setter
public function get myVar ():String
{
    return _myVar;
}

这最终在课堂外透明并显示为

myclass.myvar 

因此,AS3中的getter和setter基本上看起来像混淆属性。所以你需要一些方法来区分 - 所以你以“_”开头私有。

答案 6 :(得分:0)

我倾向于在所有私有变量前加上“_”,即使没有getter或setter也是如此。当我浏览代码时,这种方法允许我立即知道任何函数何时操纵其私有变量。这似乎是一件小事,但它可能非常有用。

除非您完全知道自己在做什么,否则尽量不要使用受保护的变量。他们是邪恶的。你曾经使用过的唯一原因是允许子类访问超类中的变量。但是,如果受保护变量的值对于超类非常重要,那么超类将永远不知道子类是否对其进行了修改。最好将其设为私有并为子类提供受保护的getter和/或setter,即使它是一个更多的工作。通过这种方式,超类可以响应任何更改值的尝试。