Javascript 在我将上下文绑定到其他内容之后,如何让VsCode代码建议发挥作用?
我有这门课:Javascript 在我将上下文绑定到其他内容之后,如何让VsCode代码建议发挥作用?,javascript,typescript,visual-studio-code,Javascript,Typescript,Visual Studio Code,我有这门课: class Cat { name = 'Mr. Kitten'; /** * A list of names */ namesList = ['Bob', 'Snow']; changeName() { this.name = this.getNameFromList(); } getNameFromList() { return this.namesList[0]; } } 在本例中,VsCode在getNameFrom
class Cat {
name = 'Mr. Kitten';
/**
* A list of names
*/
namesList = ['Bob', 'Snow'];
changeName() {
this.name = this.getNameFromList();
}
getNameFromList() {
return this.namesList[0];
}
}
在本例中,VsCode在getNameFromList()
方法中从“this”上下文中提出建议。如果我将鼠标移到该方法中的namesList
变量上,那么它会显示我对该变量的JSDocs注释。显示变量的类型。一切都很好。但是如果我重构这段代码,使getNameFromList
成为changeName
中的一个函数,如下所示:
class Cat {
name = 'Mr. Kitten';
/**
* A list of names
*/
namesList = ['Bob', 'Snow'];
changeName() {
this.name = getNameFromList.bind(this)();
function getNameFromList() {
return this.namesList[0];
}
}
}
现在VsCode不再为这个.namesList
内部的getNameFromList
提供任何建议,因为这个
现在指的是不同的上下文,VsCode不可能知道每次调用该函数时都会绑定这个
。由于我总是使用.bind(this)
调用该函数,因此我希望VsCode显示来自该上下文的建议
有没有办法让VsCode知道一个函数中的this
总是绑定到其他上下文,这样我就可以获得自动完成和建议,以便再次在getNameFromList
中工作?尝试使用jsdoc显式声明this
的类型:
类Cat{
姓名=‘小猫先生’;
/**
*名单
*/
名称列表=['Bob','Snow'];
changeName(){
this.name=getNameFromList.bind(this)();
/**@this{Cat}*/
函数getNameFromList(){
返回此名称列表[0];
}
}
}
OP使用TypeScript时为什么要使用jsdoc?我觉得他们好像在使用JS。为了说明TS的情况,您可以通过编写:函数getNameFromList(this:Cat){…}
来指定this
的类型。在JS和TS中,箭头函数完全避免了这个问题。您应该使用.call(this)
而不是.bind(this)(
)。