javascript - 函数、对象和匿名函数

标签 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. $.post 默认是异步,所以如果 isPasswordProtected 使用它来获取信息,它不能 返回标志,因为当它返回时还没有结果。参见 How do I return the response from an asynchronous call?了解详情。

  2. 即使 $.post 是同步的(它可以有一个选项,但这是一个坏主意),$.post 不会充分利用其回调的返回值,因此该回调中的 return 不会执行任何操作。

  3. 即使 $.post 返回同步的回调结果(它不是),isPasswordProtected 从不设置返回值(在该代码中,没有来自 isPasswordProtectedreturn,只有来自 $.post 的回调)。

上面的链接解释了如何更改 getPPStatusisPasswordProtected 来解决异步问题,这也从本质上解决了 return 的问题>s.

关于javascript - 函数、对象和匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39180960/

相关文章:

javascript - 如何使用 javascript 在 HTML 列表中显示和隐藏超链接

javascript - 返回 JS 数组中最大的电话号码

c++ - 模板函数内的全局值不改变 [c++]

JavaScript 解析错误

javascript - JSON 对象元素列为未定义(在使用 `jQuery.parseJSON()` 之前和之后进行测试)

javascript 淡出(vanilla js 示例)对我不起作用

mysql - 相同的 MySQL 查询在 MySQL Workbench 中返回与命令行不同的结果

c# - C#函数执行时异步等待

function - PowerShell 函数来求一个数 : 的平方

javascript - 获取当前选择的选项