如何在javascript中使用函数作为另一个函数内对象的属性

如何在javascript中使用函数作为另一个函数内对象的属性,javascript,Javascript,我正在尝试创建一个函数,该函数将对象作为参数,在对象内部我希望有一个对象方法,就像jqueryajax的工作方式一样。我现在的问题是,我无法让对象方法工作 函数myAjax({ 类型, 网址, 成功 }) { var suc=“”; typeof type==“未定义”?type=“GET”:type=type; var req=新的XMLHttpRequest(); req.onreadystatechange=函数(){ if(this.readyState==4&&this.status=

我正在尝试创建一个函数,该函数将对象作为参数,在对象内部我希望有一个对象方法,就像jqueryajax的工作方式一样。我现在的问题是,我无法让对象方法工作

函数myAjax({
类型,
网址,
成功
}) {
var suc=“”;
typeof type==“未定义”?type=“GET”:type=type;
var req=新的XMLHttpRequest();
req.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
suc=this.responseText;
//警报(this.responseText);
}
};
请求打开(类型、url、错误);
请求setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
请求发送(“fname=chijioke&lname=francis”);
函数成功(suc){}
}
myAjax({
类型:“post”,
url:“page.html”,
成功:职能(e){
警报(e);
}
});
我想做一些类似于jqueryajax调用的事情

$.ajax({
类型:“post”,
url:“索引”,
数据:{
id:id
},
成功:功能(反馈){
警惕(反馈);
}
});

我需要通过success函数获取
responseText
,但它不起作用。我希望它能像jqueryajax的成功一样工作,这真的是为了学习。

您试图做的就是调用回调函数。与其在函数中声明函数,不如调用传递给它的函数

所以不是

    function success(suc) {}
试着做

    success(suc);
这是我找到的关于这个话题的指南

执行myAjax时已经声明了“success”方法,因此不需要在myAjax中再次声明它

试试这个:

function myAjax(type, url, success) {
    var suc = "";
    typeof type === "undefined" ? type = "GET" : type = type;

    var req = new XMLHttpRequest();
    req.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            suc = this.responseText;
            success(suc); //Call to outside method
        }
    };
    req.open(type, url, false);
    req.setRequestHeader("Content-type", "application/x-www-form- 
    urlencoded ");
    req.send("fname=chijioke&lname=francis");
}

实际上,您要做的是非常常见的回调函数。将函数作为参数传递,然后在内部调用它

在您的实现中,您正在做

function success(suc){}
这实际上只是定义了一个名为success的方法。。你需要像这样调用这个方法

success(suc);
此外,检查类型是否未定义的行通常不会计算为true,因为您应该检查

type === undefined //"undefined" != undefined
我还要提到的一件事是,您试图在方法末尾调用回调函数,但实际上应该在onreadystatechange中调用它,以便在请求完成时调用它,而不是在方法完成时调用它

    req.onreadystatechange = function(){
        if (this.readyState == 4 && this.status == 200){
            suc = this.responseText;
            success(suc);
        } 
    };

您的代码根本没有缩进,所以我这样做了,它显示了您代码中的一些缺陷;也就是说,您的
myAjax
函数永远不会关闭。如果您想进一步阅读一些有趣的内容,请了解Promissions,这是处理异步代码的另一种方法。在很多情况下,它们都比回调有趣得多(但两者都有很好的用例!)承诺实际上也使用回调函数,但它们清理了调用异步方法的过程,所以一定要检查它们。是的,它们大多只提供更可读和可维护的代码。