我有两种方法来构造我的类,我想知道哪种方式会被认为更正确。AS3:嵌套函数+自引用VS构造函数级函数和变量
选项#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中形式不正确,不应使用。将变量和函数保持为私有的问题是什么?这样只有对象本身才能访问这些函数/变量。和构造函数(以及函数)支持可选参数。 – DodgerThud 2014-11-06 09:17:30
我认为第二个比第一个更好。 – akmozo 2014-11-06 11:23:52
第二个问题是,如果我有10个参数,那么我需要在构造函数之外为我的函数创建10个重复变量以供使用。 – BladePoint 2014-11-06 13:16:38