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

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

兩個相同的對象使用相同的方法輸出不同的結果

兩個相同的對象使用相同的方法輸出不同的結果

慕村225694 2021-09-17 12:57:24
所以這是我的代碼,你可以看到你有一個名為“Obj”的對象,然后你有一個名為“myClass”的類,它創建的對象與“Obj”對象相同,但對象“newObj”中的run方法是從創建的myClass 輸出不同的結果,這是沒有意義的,因為兩個對象 100% 相同    var x = 10; //global var    var Obj =  {        x:30 ,        run : () => {          console.log(this.x);      }    }    console.log(Obj)    Obj.run() //outputs 10    //a class which creates the same 'Obj' Object    class myClass {      constructor() {        this.x=30        this.run = () => {          console.log(this.x)        }      }    }    var newObj = new myClass()    console.log(newObj); //outputs an object which is as identical as the 'Obj' Object    newObj.run(); //outputs 30 instead of 10就是這樣,提前謝謝
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

由于您在對象內使用箭頭函數,因此this變為window,而不是Obj。但是在類中,run 函數在構造函數內部,this生成對象,而不是window. 如果您希望對象打印對象 x,則需要使用Obj.x.


var Obj =  {

    x:30 ,

    run : () => {

      console.log(Obj.x);

  }

}

即使兩個對象在同一個作用域中,它們也不是在同一個作用域中創建的,它們的創建方式也不同。類是構造函數,對象不是。


如果您確實想使用this關鍵字,那么run : () =>您可以簡單地將其替換為run ()。然后你可以使用this.x代替Obj.x。它有點像在類中(在其構造函數之外)定義一個函數。


var Obj =  {

    x:30 ,

    run () {

      console.log(this.x);

  }

}


查看完整回答
反對 回復 2021-09-17
?
哈士奇WWW

TA貢獻1799條經驗 獲得超6個贊

假設這是在瀏覽器中,當你說var x = 10; // global var全局對象是瀏覽器的window,所以你說window.x = 10;

然后創建你的“目標文件”,并指定X,x:30但你仍然在全球范圍內,所以在那里當“運行”運行,this還是指windowwindow.x為10。

當您擁有myClass并構造其中之一newObj時,此時this現在指的是構造的對象,因此this.x指的是成員x,即 30。

在控制臺中查看時,它們可能看起來相同,但這是因為控制臺兩次都在同一范圍內工作。嘗試在您所做的每一行上放置一個斷點,console.log并檢查您遇到斷點時this和的值。this.x


查看完整回答
反對 回復 2021-09-17
  • 3 回答
  • 0 關注
  • 223 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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