TypeScript:undefined不是函数

TypeScript:undefined不是函数,typescript,undefined,Typescript,Undefined,我参加了以下ts课程: class TrackerManager { public _csTrackers: DevExpress.data.CustomStore; public _dbOptions: DevExpress.data.CustomStoreOptions; private SERVICE_URL_GET_TRACKERS: string = 'xx' private SERVICE_URL_UPDATE_TRACKER: string = 'xx' private SERV

我参加了以下ts课程:

class TrackerManager {

public _csTrackers: DevExpress.data.CustomStore;
public _dbOptions: DevExpress.data.CustomStoreOptions;
private SERVICE_URL_GET_TRACKERS: string = 'xx'
private SERVICE_URL_UPDATE_TRACKER: string = 'xx'
private SERVICE_URL_GET_GPSSYSTEMS: string = 'xx'

constructor() {
    this.initTrackersCustomStoreSettings();
}

private initTrackersCustomStoreSettings(): void {
    this._dbOptions = {
        load: function (loadOptions):any {
            debugger;
            return this.SendRequest(this.SERVICE_URL_GET_TRACKERS, 'GET');
        },
        insert: function (params):any {
            //return dbImpl._sendRequest(SERVICE_URL_UPDATE_TRACKER, 'POST', params);
        },
    };
}

public SendRequest(myurl: string, t: string): any {
    //ToDo
}

public getTrackerCustomStore(): DevExpress.data.CustomStore {
    this._csTrackers = new DevExpress.data.CustomStore(this._dbOptions);
    return this._csTrackers;
}
}

调用load时,有人能告诉我为什么未定义this.SendRequest吗?我要改变什么

我是打字新手

多谢各位。 向您问好

问题

现在,代码的JavaScript输出如下所示:

TrackerManager.prototype.initTrackersCustomStoreSettings = function () {
    this._dbOptions = {
        load: function (loadOptions) {
            debugger;
            return this.SendRequest(this.SERVICE_URL_GET_TRACKERS, 'GET');
        },
        // omitted...
    };
};
正如您所看到的,这个值将不会被保留

解决方案

要解决此问题,请使用箭头函数保留上下文:

private initTrackersCustomStoreSettings(): void {
    this._dbOptions = {
        load: (loadOptions) => {
            debugger;
            return this.SendRequest(this.SERVICE_URL_GET_TRACKERS, 'GET');
        },
        // omitted...
    };
}
将传输到以下javascript:

TrackerManager.prototype.initTrackersCustomStoreSettings = function () {
    var _this = this; // notice this new variable and how it's used
    this._dbOptions = {
        load: function (loadOptions) {
            debugger;
            return _this.SendRequest(_this.SERVICE_URL_GET_TRACKERS, 'GET');
        },
        // omitted...
    };
};

由于您尚未实现SendRequest方法,因此它不会返回值。因此,当您尝试返回SendRequest的结果时,您将得到未定义的结果。

this.SendRequest不是唯一未定义的内容。当我查看运行时,一旦进入加载函数,所有内容都是未定义的,例如this.\u dbOptions、this.SERVICE\u URL\u get\u TRACKERS。看来我没法上我的课。还有其他想法吗?我已经尝试过你的解决方案,但仍然没有定义任何内容,例如:this.SendRequest、this.\u dbOptions、this.SERVICE\u URL\u GET\u当im处于加载功能时的跟踪器。看起来我无法访问我的类方法/变量。还有其他想法吗?补充:对不起,正如你写的那样,现在应该可以了。谢谢!我很恼火chrome调试器调试ts文件,但仍然显示未定义,但当我继续时,它跳转到SendRequest,什么是正确的。再次感谢你@用户1539859没问题!当你说它不工作时,我想可能是缓存问题。我以前也有chrome的问题。