我有兩種方法來構造我的類,我想知道哪種方式會被認爲更正確。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