为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

沧海一幻觉 2022-09-29 15:27:53
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 calllet v = 2let 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'”。谁能解释一下为什么会发生这种情况?
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

那是因为做事与做事有着根本的不同。ptr = a1.op; ptr("s");a1.ptr("s");

this值取决于您从哪个位置调用函数。如果你打电话给,它相当于在草率模式下,在严格模式下(有关严格和草率模式的更多详细信息,请阅读MDN文档ptr("s")window.ptr("s")thiswindowundefined)

当您从对象调用函数时,该对象是为什么会起作用的原因,因为将是thisa1.op("s")thisa1


查看完整回答
反对 回复 2022-09-29
  • 1 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号