关于“this”范围的最佳实践/编码标准是AS3?有吗?我觉得这对标准化和我的可读性有帮助,但有时看起来“太多了”。
例如,以下是否真的有必要使用“this”(我知道它没有“this”)?:
private var _item:Object;
private var selectedItem:Object;
public function set item(value:Object):void
{
this._item = value;
if (this._item["label"] == "doodad")
this.selectedItem = value;
}
public function set item(value:Object):void
{
return this._item;
}
答案 0 :(得分:3)
除非您想要防止本地范围的变量(例如方法参数)和实例变量之间的命名冲突,否则不需要“this”。
在你的例子中,你已经使用下划线来标记一个私有变量,所以这是一个额外的理由不使用“this”,因为你真的说两次相同的东西。
答案 1 :(得分:1)
当然没有必要,但我同意它有助于提高可读性。由于我在更动态的语言(例如Perl和Python)中工作得更多,因此这些约定对于快速确定变量和函数的作用域/定位位置至关重要。如果这个惯例适合你,我认为这本身并不是一件坏事。
如上所述,我花了几个小时重新格式化代码,其中包含阻碍可读性的笨拙惯例。
例如:我工作的一个人写了这样的所有作业:
var foo:String= "bar";
这很烦人(我更喜欢“=”因此我可以清楚地看到操作员),而且我花了很多时间来清理我必须维护的数千行代码。他的会议(虽然我们多次辩论,但他拒绝妥协)往往会阻碍我的工作。
与其他人合作,争取团结。如果他们需要支持你的代码并发现这种情况更加恶化,那么将它留在其中可能是不值得的。如果你不希望任何人直接使用源代码,请使用帮助你理解你的代码和文档的约定(某处)他们的意思是。
答案 2 :(得分:1)
如果您在团队中工作,请坚持团队的编码惯例。
但就个人而言,我发现明确使用“this”,当不需要消除歧义时,过度杀戮会对AS3等静态类型语言的可读性产生负面影响(动态语言是另一个故事!)。
一个班级应该只有一个责任,所以一般不应该有太多的属性。在方法内部,您通常会处理三种类型的变量:临时局部变量,方法参数和属性。方法不应该太长,因此应该很容易发现三种类型之间的差异 - 如果它没有在本地定义并且没有作为参数传递,那么它就是一个属性。如果整个方法不适合你的屏幕那么它可能太长了!
我只需要在需要时使用“this”来消除属性和具有相同名称的参数之间的歧义。
答案 3 :(得分:0)
我不喜欢过多使用“this”,但有时会在Eclipse中使用,只是为了获得自动完成(可能是最糟糕的理由!)
如果你的例子是:
会更有意义public function set item(_item:Object):void
{
this._item = _item;
if (this._item["label"] == "doodad")
this.selectedItem = this._item;
}