我有这样的公共打字稿类型:
export class Generator {
public generate(settings: GeneratorSettings): void {
$('#' + settings.Id+ "").dataTable({
dom: 'RC<"clear">rti<"bottom"pl>',
sAjaxSource: settings.sourceUrl,
bServerSide: true,
pageLength: 15,
lengthMenu: [15, 25, 50, 100],
fnDrawCallback: (oSettings) => { this.internalCallback(oSettings); settings.publicCallback(); }
});
}
private internalCallback(oSettings: any) {
// Do work
}
在这种情况下,我使用的是提供回调函数的第三方库(jQuery DataTables)。为了允许稍后使用此类型的用户挂钩事件,我在我的设置中包含了一个公共publicCallback
属性,此类消费者可以将其设置为自己的功能。
正在使用publicCallback
的一个例子是:
在HTML内联脚本中,我有:
settings.publicCallback = externalModule.initialise;
其中externalModule
是另一种TypeScript类型的实例,如下所示:
export class ExternalModule {
public initialise() {
// Various things happen before here
$("#button").on("click", (event) => {
this.buildIdList(event);
});
}
private process(event: any){
// Doing work
}
我的问题在于ExternalModule.initialise
功能。在从其他TypeScript模块调用时,此时this
关键字是settings
属性所在的publicCallback
参数。
我已阅读this
关键字,我理解为什么会发生这种情况,但我无法找到解决方法。我尝试在Generator
类型中执行以下操作:
fnDrawCallback: (oSettings) => { this.internalCallback(oSettings); settings.publicCallback.bind(settings.publicCallback)();
但由于this
关键字仅指向initialise
方法,因此无效。
答案 0 :(得分:1)
您可以使用Function.prototype.bind功能,如下所示:
settings.publicCallback = externalModule.initialise.bind(externalModule);
它会将externalModule
的范围保存为this
对象,然后您的箭头函数回调也将具有正确的this
。