Javascript 在TypeScript中,由函数表达式和箭头表达式初始化的变量中是否存在“this”?
在ng引导中,我无法将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
函数
分配给属性[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
,则必须将其传输到函数
,但必须绑定上下文