Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用打字稿。为什么';这';从函数变量调用函数时,关键字值未定义?_Javascript_Angular_Typescript - Fatal编程技术网

Javascript 用打字稿。为什么';这';从函数变量调用函数时,关键字值未定义?

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模式的详细

在上面的示例中,我分别创建了a&b类has op和op1方法。根据我的选择(如switch语句),我想调用一个方法。但我得到一个错误“无法读取未定义的属性”http“。 有人能解释为什么会这样吗


提前谢谢

那是因为执行
ptr=a1.op;ptr(“s”)
与doing
a1.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");