Javascript 用打字稿。为什么';这';从函数变量调用函数时,关键字值未定义?
在上面的示例中,我分别创建了a&b类has op和op1方法。根据我的选择(如switch语句),我想调用一个方法。但我得到一个错误“无法读取未定义的属性”http“。 有人能解释为什么会这样吗Javascript 用打字稿。为什么';这';从函数变量调用函数时,关键字值未定义?,javascript,angular,typescript,Javascript,Angular,Typescript,在上面的示例中,我分别创建了a&b类has op和op1方法。根据我的选择(如switch语句),我想调用一个方法。但我得到一个错误“无法读取未定义的属性”http“。 有人能解释为什么会这样吗 提前谢谢 那是因为执行ptr=a1.op;ptr(“s”)与doinga1.ptr(“s”) 此值取决于调用函数的位置。如果您调用ptr(“s”),它相当于window.ptr(“s”)所以这个是在sloppy模式下的window,在strict模式下的未定义的(有关strict和sloppy模式的详细
提前谢谢 那是因为执行
ptr=a1.op;ptr(“s”)
与doinga1.ptr(“s”)代码>
此值取决于调用函数的位置。如果您调用ptr(“s”)
,它相当于window.ptr(“s”)
所以这个是在sloppy模式下的window
,在strict模式下的未定义的(有关strict和sloppy模式的详细信息,请阅读)
当你从一个对象调用函数时,this
就是这个对象,这就是为什么a1.op(“s”)
会工作的原因,因为this
将是a1
试图把它说得更简洁:this
的值在调用时决定,并将设置为之前的值。在a.b()。没有a.
,没有这个
。
export class Http {
m1(s:string) {
console.log("in m1",s);
}
m2(s:string) {
console.log("in m2",s);
}
}
export class a{
http=new Http();
op(s:string) {
console.log(this);
this.http.m1(s+"from a");
}
}
export class b {
http=new Http();
constructor() { }
op1(s:string) {
console.log(this);
this.http.m2(s+"from b");
}
}
//main function call
let v = 2
let ptr = null;
let a1 = new a();
let b1 = new b();
switch(v) {
case 1:
ptr=a1.op;
break;
case 2:
ptr=b1.op1;
break;
}
ptr("s");