亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在類型腳本中。為什么從函數變量調用函數時未定義“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 關注
  • 74 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號