TypeScript:undefined不是函数
我参加了以下ts课程: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
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的问题。