从AS3中的另一个类获取变量的最佳方法

时间:2014-05-05 20:21:09

标签: actionscript-3 flash class

我想知道在尝试从anotherClass到Main-document-class获取变量时,哪种方法最好,为什么?还有更多甚至更好的方法吗?

在示例no 1和Main-function中,可以在checkLogin函数完成之前触发if-else语句?谢谢!

我没有1.方式

public class Main extends MovieClip {

// Declaring other classes.
    private var checkLogin:CheckLogin;

    public function Main() {
        checkLogin = new CheckLogin();
        if(checkLogin.isLoggedIn == true) {
            trace("Is logged in");
        } else {
            trace("Not logged in");
        }
    }   
}

public class CheckLogin {

    public var isLoggedIn:Boolean;

    public function CheckLogin() {
        isLoggedIn = false;
    }
}

或者用这种方式做得好多了, (方式2):

public class Main extends MovieClip {

    // Declaring other classes.
    private var checkLogin:CheckLogin;

    public function Main() {
        checkLogin = new CheckLogin();
        checkLogin.addEventListener("checkLogin.go.ready", checkLoginReady);
        checkLogin.go();
    }
    public function checkLoginReady(event = null) {
        if(checkLogin.isLoggedIn == true) {
            trace("Is logged in");
        } else {
            trace("Not logged in");
        }
    }
}

public class CheckLogin extends EventDispatcher {

    public var isLoggedIn:Boolean;

    public function CheckLogin() {
        isLoggedIn = true;
    }

    public function go() {
        this.dispatchEvent(new Event("checkLogin.go.ready"));
    }
}

1 个答案:

答案 0 :(得分:0)

通常,使用事件会使代码更易于维护。

您描述的登录检查似乎是即时的,因此对于这样一个简单的案例,第1号方法就可以了。

登录检查(或任何进程)通常可能不是即时的,例如,如果CheckLogin类发送了服务器请求并等待响应。在这种情况下,使用事件更好。 Main类可以侦听LOGIN_SUCCESS或LOGIN_FAIL事件,并在事件发生时处理它。所有登录逻辑都保留在CheckLogin中。

此外,使用事件将允许多个感兴趣的类做出反应,而他们不知道任何内部登录过程。