我有公共打字稿類型,像這樣:打字稿回調到外部文件綁定「this」關鍵字
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的數據表),它提供了一個回調函數。爲了讓稍後使用此類型的用戶能夠與事件掛鉤,我在我的設置中包含了一個公開的publicCallback
屬性,該類型的用戶可以將其設置爲各自的功能。正在使用的publicCallback
的
一個實例是這樣的:
在HTML聯腳本我有:
settings.publicCallback = externalModule.initialise;
哪裏externalModule
是另一種打字原稿類型的實例如下:
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
是publicCallback
屬性所在的settings
參數。
我已閱讀this
關鍵字,我明白爲什麼發生這種情況,但是我無法找到解決辦法。我試圖做的Generator
類型如下:
fnDrawCallback: (oSettings) => { this.internalCallback(oSettings); settings.publicCallback.bind(settings.publicCallback)();
但是這使得沒有幫助,因爲現在this
在剛剛initialise
方法關鍵字點。
當你有權訪問這個時,你需要將它存儲在一個變量中,並訪問該變量 – 2426021684
我從來沒有問題到我想要的'this'上下文。只要'initialise'函數被調用,'this'就有'settings'參數的上下文 - 沒有機會捕獲正確的上下文。 – FLSH