【发布时间】:2014-11-06 08:50:58
【问题描述】:
我有两种方式来组织我的课程,我想知道哪种方式更正确。
选项#1 是在构造函数中声明我的所有变量和函数以将它们保持在本地,但问题是我的嵌套函数认为this 意味着[Object Global] 而不是[Object MyObject]。所以在构造函数中,我必须创建对对象var thisObject:MyObject = this; 的引用,并在我的嵌套函数中使用thisObject 而不是this。
选项 #2 是在构造函数之外声明我的所有变量和函数,并且与构造函数处于同一级别。这意味着我的变量对类来说是全局的,我的印象是你应该尽可能地保持你的变量是本地的。此外,我的构造函数接受参数,因此我必须为每个参数创建一个重复的全局版本,以供我的全局函数使用。
哪种方式被认为是最佳实践?
选项#1
public class MyObject extends sprite {
public function MyObject(myInt:int) {
var thisObject:MyObject = this;
addEventListener(MouseEvent.CLICK,nesetedCallbackFunction);
function nestedCallbackFunction(evt:MouseEvent):void {
trace(this); //[Object Global]
trace(thisObject); //[Object MyObject]
thisObject.x += myInt;
}
}
}
选项#2
public class MyObject extends sprite {
var myIntProperty:int;
public function MyObject(myInt:int) {
myIntProperty = myInt;
addEventListener(MouseEvent.CLICK,globalCallbackFunction);
}
public function globalCallbackFunction(evt:MouseEvent):void {
this.x += myIntProperty;
}
}
【问题讨论】:
-
匿名函数在 AS3 中是不好的形式,不应使用。保持变量和函数私有有什么问题?这样只有对象本身才能访问这些函数/变量。并且构造函数(以及函数)支持可选参数。
-
我觉得第二个比第一个好。
-
第二个的问题是,如果我有 10 个参数,那么我需要为构造函数之外的函数创建 10 个重复变量才能使用。
-
第一种方法不是好的做法,被认为是糟糕的代码。此外,如果你想找一份工作,你举个例子,没有人会雇用你。拥有 10 个参数也是不好的做法,应保留用于特殊和合理的需求。仅应使用构造函数直接需要的参数,然后应使用公共成员变量或 getter/setter 设置其他变量。
-
完全正确。或者使用带有自定义数据的初始化对象之类的东西,并且只根据需要设置必要的变量。类似于 greensock 补间引擎定义应该实际补间的变量的方式。
标签: actionscript-3 optimization global-variables