猿问

在类型脚本中。为什么从函数变量调用函数时未定义“this”关键字值?

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");

在上面的例子中,我创建了一个&b类,分别有op &op1方法。根据我的选择(如在 switch 语句中),我想调用一个方法。但我收到一个错误“无法读取未定义的属性'http'”。谁能解释一下为什么会发生这种情况?


沧海一幻觉
浏览 64回答 1
1回答

UYOU

那是因为做事与做事有着根本的不同。ptr = a1.op; ptr("s");a1.ptr("s");this值取决于您从哪个位置调用函数。如果你打电话给,它相当于在草率模式下,在严格模式下(有关严格和草率模式的更多详细信息,请阅读MDN文档ptr("s")window.ptr("s")thiswindowundefined)当您从对象调用函数时,该对象是为什么会起作用的原因,因为将是thisa1.op("s")thisa1
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答