我想知道在尝试从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"));
}
}
答案 0 :(得分:0)
通常,使用事件会使代码更易于维护。
您描述的登录检查似乎是即时的,因此对于这样一个简单的案例,第1号方法就可以了。
登录检查(或任何进程)通常可能不是即时的,例如,如果CheckLogin类发送了服务器请求并等待响应。在这种情况下,使用事件更好。 Main类可以侦听LOGIN_SUCCESS或LOGIN_FAIL事件,并在事件发生时处理它。所有登录逻辑都保留在CheckLogin中。
此外,使用事件将允许多个感兴趣的类做出反应,而他们不知道任何内部登录过程。