2014-11-04 107 views
0

我正在閱讀http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/,並試圖更好地理解「這個」。使用forEach訪問對象數據,而不使用forEach的thisArg?

但是我遇到了令我困惑的事情:我似乎無法使用forEach的「this」參數訪問對象數據(在本例中爲「用戶」對象)。

http://jsfiddle.net/t7fvj0zp/

我能得到的信息是這樣的:

var user = { 
    tournament:"The Masters", 
    data :[ 
    {name:"T. Woods", age:37}, 
    {name:"P. Mickelson", age:43} 
    ], 

    clickHandler:function() {    
     this.data.forEach (function (person) { 
      console.log (person.name); 
     }) 
    } 
} 

user.clickHandler(); //"T. Woods", "P. Mickelson" 

然而,下面帶來了 「不確定」:

console.log (user.data.name); 

或者這帶來了「this.user是未定義「:

console.log (this.user.data.name); 

我錯過了什麼?是不是可以「回溯」,並且在forEach中,不使用thisArg訪問對象信息?或者,或許,與長期書寫的「人」等同的是什麼?

+1

'user.data'是一個數組。嘗試'console.log(user.data [0] .name);'而不是 – friedi 2014-11-04 16:52:04

+0

@friedi謝謝,這確實奏效。但是,因爲它是一個forEach循環,是否有辦法打印這兩個名字?或者是在thisArg變得必要的地方,或者forEach循環中的「for」循環?編輯:好吧,鉭下面說「不」。 – Terf 2014-11-04 16:59:38

回答

1

根據MDN's forEach documentation

如果thisArg參數提供給forEach,它會通過調用時,用作this值回調。否則,將傳遞值undefined作爲其值。

因此,不可能在不使用thisArg的情況下「回溯」並訪問對象信息。

+0

謝謝,我確實讀過,但沒有完全理解這意味着什麼。 – Terf 2014-11-04 17:00:35

1

數據對象的數組,不是關聯數組, 所以你可以試試:

console.log (user.data[0].name); 

console.log (this.user.data[0].name); 

接取您的數據。

,你需要傳遞一個參數的forEach到aceess這樣

clickHandler:function() {    
     this.data.forEach (function (value) { 
      console.log (value.name); 
     }) 
    } 

http://jsfiddle.net/t7fvj0zp/1/

希望i的值幫助