对象内部的回调

Callbacks inside an object

为什么这行不通

我在一个对象中通过 jquery 有一个 ajax 函数,出于某种原因它是 在回调函数中没有看到对象中的其他函数。

function object () {

this.test = function () { alert ("test") }

this.makeQuery = function() {
$.ajax( { 
    url: stuff,
    dataType: "xml",
    success: function (data) {  makeData(data) } } )        

}   

this.makeData = function (data) {

  this.test();   // Error "this.test() is not a function"
}

}

原因是回调函数的调用方式不同"this"。在 jQuery.ajax 调用的情况下,"this" 函数是 jqXHR 对象 http://api.jquery.com/Types/#jqXHR。因此,如果您想将 "this" 对象传递到回调中,您必须在作用域中捕获它并引用捕获的变量。像这样(如果我修复了你所有的语法错误):

function myFunction() {
    var that = this;
    this.test = function () { alert ("test") };

    this.makeQuery = function() {
        jQuery.ajax({
                type: 'post',
                url: 'someUrl',
                dataType: 'json',
                success: function (data, textStatus, jqXHR) {
                    that.makeData(data);
                },
                error: function (jqXHR, textStatus, textError) {
                }
            });
        };

    this.makeData = function(data) {
        this.data = data
        this.test();   // Error "this.test() is not a function"
    };
}
var m = new myFunction();
m.makeQuery();