使用forEach访问对象数据,而不使用forEach的thisArg?

时间:2014-11-04 16:45:02

标签: javascript object foreach undefined this

我正在阅读http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/并尝试更好地理解"这个"。

但是我遇到了令我困惑的事情:我似乎无法访问对象数据(在这种情况下是"用户"对象)而不使用forEach' s&#34 ;这"论点。

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"

然而,下面提到" undefined":

console.log (user.data.name);

或者这会导致" this.user未定义":

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

我错过了什么?不可能"回溯"并且,在forEach中,不使用thisArg访问对象信息?或许,等同于" person"写得很长?

2 个答案:

答案 0 :(得分:1)

根据MDN's forEach documentation

  

如果向thisArg提供了forEach参数,则会在调用时将其传递给回调,以用作此值。否则,将传递值undefined以用作此值。

所以不可能"回溯"并在不使用thisArg的情况下访问对象信息。

答案 1 :(得分:1)

data是一个对象数组,而不是一个关联数组, 所以试试像:

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

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

获取您的数据。

你需要将一个参数传递给forEach以使这个值成为

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

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

希望我帮助