函数,对象和匿名函数

时间:2016-08-27 12:06:35

标签: javascript function

我在下面有这段代码。

var user = new user();

function user() {

    // returns true if the account is password protected
    function isPasswordProtected(data, callback) {
        //check if the account is a password protected account, and if so request the password.
        $.post('user_functions/ifpasswordprot.php', {uid: data['uid']}, function(data) { return callback(data);});
    }

    // function that returns 1 if the user is password protected
    this.getPPStatus = function() { return isPasswordProtected({uid: this.userid}, function(data) { return data; }); };

}

这旨在创建一个用户对象的商店,可以从该网站的其他地方引用该对象。除此之外还有更多内容,但这是与此相关的代码。

在另一个页面中,我试图找出登录的用户是否使用密码保护了他们的帐户,如下所示:

alert(user.getPPStatus());

然而,这总是以undefined形式出现。

我不是JavaScript中的对象专家,也不是匿名函数用户的专家。任何人都可以解释为什么这不起作用?似乎每回合都有足够的回报,应该没问题。

这是一个异步问题,所以:

var user = new user();

function user() {
    // returns true if the account is password protected
    function isPasswordProtected(data, callback) {
    //check if the account is a password protected account, and if so request the password.
    $.post('function/get-ifpasswordprotected.php', {uid: data['uid']}, function(data) { callback(data);});
}

    // function that returns 1 if the user is password protected
    this.getPPStatus = function(**callback**) { isPasswordProtected({uid: this.userid}, **callback**); };

}

然后

user.getPPStatus(function(result) { 
    **DO STUFF HERE**
});

绝对不知道这是不是好javascript但是嘿,它有用...... :)

1 个答案:

答案 0 :(得分:2)

有三个理由可以解决这个问题:

    默认情况下,
  1. $.post 异步,因此如果isPasswordProtected使用它来获取信息,则无法返回标记,当它返回时它还没有结果。有关详细信息,请参阅How do I return the response from an asynchronous call?

  2. 即使$.post是同步的(也可以是选项,但这不是一个好主意),$.post并没有使用返回其回调值,因此该回调中的return无法执行任何操作。

  3. 即使 $.post要返回回调的结果(如果它是同步的(它没有),isPasswordProtected也不会设置回报价值(在该代码中,return没有isPasswordProtected,只有回调到$.post。)

  4. 上面的链接说明了如何更改getPPStatusisPasswordProtected以解决异步问题,该问题本身也解决了return的问题。