0

我有以下代码用于定义一个类

var class1 = function () {
    this.classData = 'value1';
    this.func1 = function(callback) {
        $.ajax({
            'url': '/somewhere',
            'dataType': 'json',
            'type': 'POST',
            'data': {
                options: 'some text'
            },
            'success': function (data, textStatus, jqXHR) {
                callback(data); // <<<<<< THIS LINE
            }
        });
    };
};

然后我像这样打电话给班级

var obj1 = new class1();
obj1.func1(function (d) {
    this.classData = d;
});

但这似乎不起作用,因为在 sucess 函数内部,当在上面代码中标记的行调用回调函数时,它的this对象指向window而不是obj1值。

我在这里做错了什么,我该如何解决?

4

1 回答 1

1

这实际上不是范围问题,而是上下文问题。this,当你的函数被调用时,是调用时函数的接收者,而不是对象obj1

做这个 :

var obj1 = new class1();
obj1.func1(function (d) {
    obj1.classData = d;
});

这是正确的方法。

如果您的回调都意味着将 class1 的实例作为接收者,您也可以这样做:

var class1 = function () {
    this.classData = 'value1';
    var _this = this;
    this.func1 = function(callback) {
        $.ajax({
            'url': '/somewhere',
            'dataType': 'json',
            'type': 'POST',
            'data': {
                options: 'some text'
            },
            'success': function (data, textStatus, jqXHR) {
                _this.callback(data); // note that I call the callback on the instance of obj1
            }
        });
    };
};
于 2012-10-13T14:22:52.223 回答