Javascript 在TypeScript中,由函数表达式和箭头表达式初始化的变量中是否存在“this”?

Javascript 在TypeScript中,由函数表达式和箭头表达式初始化的变量中是否存在“this”?,javascript,angular,typescript,ng-bootstrap,Javascript,Angular,Typescript,Ng Bootstrap,在ng引导中,我无法将函数分配给属性[ngbTypeahead]。在的示例代码中,箭头表达式(lambda表达式)用于构造委托搜索 […] 搜索=(文本$:可观察)=> 文本$.pipe( 去BounceTime(300), distinctUntilChanged(), 点击(()=>this.search=true), 开关映射(术语=> 此.u服务.search(术语).pipe( 点击(()=>this.searchFailed=false), 捕获错误(()=>{ this.searc

在ng引导中,我无法将
函数
分配给属性[ngbTypeahead]。在的示例代码中,箭头表达式(lambda表达式)用于构造委托
搜索

[…]
搜索=(文本$:可观察)=>
文本$.pipe(
去BounceTime(300),
distinctUntilChanged(),
点击(()=>this.search=true),
开关映射(术语=>
此.u服务.search(术语).pipe(
点击(()=>this.searchFailed=false),
捕获错误(()=>{
this.searchFailed=true;
归还([]);
}))
),
点击(()=>this.search=false)
);
[...]
当我改变初始化搜索的方式时,我得到了
未定义的
值的错误
this
。这是我的实验代码

//此代码工作正常。
[...]
costCenterFromSearch=(文本$:可观察)=>{
返回文本$.pipe(
去BounceTime(300),
distinctUntilChanged(),
开关映射(术语=>{
返回this.http.get(this.typeAheadUrl{
params:new-HttpParams().set(“搜索”,术语)
}).烟斗(
映射(响应=>{
return>map(响应,f=>(

//此代码引发错误。
[...]
costCenterFromSearch=函数(文本$:可观察){
返回文本$.pipe(
去BounceTime(300),
distinctUntilChanged(),
开关映射(术语=>{
返回this.http.get(this.typeAheadUrl{
params:new-HttpParams().set(“搜索”,术语)
}).烟斗(
映射(响应=>{
return>map(响应,f=>(

然而,当我把这个示例代码放到

class-foo{
a:string=“测试”;
构造函数(){}
bar_func=函数(){
console.log(this.a);
}
bar_lambda=()=>{
console.log(this.a);
}
}

从结果来看,
在函数表达式和箭头表达式中都可用。因此,我不清楚
是否在箭头表达式中可用,因为它在ngbTypeahead属性中不起作用。

您在哪里使用
costCenterFromSearch
?您还必须绑定上下文。您是否要插入在你的构造函数中使用ect httpClient?我只是想指出这两个完全相同。我把它们放在一个不同的工具中,认为我遗漏了什么。猜测一个有一个函数,另一个有一个
=>
@Pranithan T。你刚刚发现了arrow是如何在@Pranithan运行的。好的,这是typescript。我怀疑transpiled
=>
取决于编译器的选项
--target
(简称
-t
)。如果设置为
ES5
或默认
ES3
,则必须将其传输到
函数
,但必须绑定上下文