gpt4 book ai didi

javascript - 如何对通过上下文传递到我的 ajax done 函数的值进行类型检查?

转载 作者:搜寻专家 更新时间:2023-10-30 21:09:24 25 4
gpt4 key购买 nike

我定义了以下类:

class Link {
Action: string;
DialogType: string;
constructor ($link: JQuery) {
this.Action = $link.attr('data-action') || '';
this.DialogType = $link.attr('data-dialogType') || '';
}
}

我有声明类实例的函数。一旦类被声明,我就可以使用智能感知并且有完整的类型检查:

function adminDialog($link: JQuery) {
var link = new Link($link);
link.Modal.MaxHeight = 600;
doDialogAjax(link);
}

在下面的 doDialogAjax 函数中,我仍然有完整的类型检查:

function doDialogAjax(link: Link) {
$.ajax( link.Url, {
cache: false,
context: { link: link },
dataType: 'html'
}).done(onDialogDone).fail(onDialogFail);
}

此时,如果我尝试访问 this.link,我将失去类型检查:

function onDialogDone(data: any, textStatus: string, jqXHR: JQueryXHR) {

// no type checking. I can type anything after this.link
var x = this.link.abcdefg;

// I assign to link
var link: Link = this.link;

// Now I get checking
var a = link.Modal.MaxHeight; // allowed
var a = link.abcdefg; // error

// However will the following change the property of the link passed
// into the function. I assume not but I am not 100% sure.
link.Modal.MaxHeight = 999;

}

所以我的问题是如何对使用上下文传递给函数 onDialogDone 的 link 的值进行类型检查?另外,在该函数中创建一个新的变量链接之后,我对链接所做的任何更改都不会对作为 this.link 传入的对象进行任何更改,这是否正确?

最佳答案

这一行是做你想做的事情的完全有效的方式:

var link: Link = this.link;

我建议将其更改为:

var link = <Link>this.link;

JavaScript 中的每个对象都是一个引用,您不会用这一行创建一个新对象。因此,对新链接变量的任何更改都会反射(reflect)在 this.link 上。

关于javascript - 如何对通过上下文传递到我的 ajax done 函数的值进行类型检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com