【问题标题】:Accessing object data with forEach, without the use of forEach's thisArg?使用 forEach 访问对象数据,而不使用 forEach 的 thisArg?
【发布时间】:2014-11-04 16:45:02
【问题描述】:

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

但是我遇到了一些让我困惑的事情:如果不使用 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 is undefined”:

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

我错过了什么?不使用 thisArg 就不能“回溯”并在 forEach 中访问对象信息吗?或者,什么是长边写的“人”的等价物?

【问题讨论】:

  • user.data 是一个数组。改用console.log(user.data[0].name);
  • @friedi 谢谢,确实有效。但是,由于它是一个 forEach 循环,有没有办法让它打印出两个名称?或者是 thisArg 成为必要的地方,还是 forEach 循环中的“for”循环?编辑:好的,钽在下面说“不”。

标签: javascript object foreach undefined this


【解决方案1】:

根据MDN's forEach documentation

如果thisArg 参数被提供给forEach,它会在调用时传递给回调,用作它的 this 值。否则,undefined 的值将被传递用作它的 this 值。

所以不,不使用thisArg,就不可能“回溯”并访问对象信息。

【讨论】:

  • 谢谢,我确实读过,但不完全明白这意味着什么。
【解决方案2】:

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/

希望能帮到你

【讨论】:

    猜你喜欢
    • 2021-08-11
    • 1970-01-01
    • 2019-02-12
    • 2021-11-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2014-10-16
    • 2019-05-09
    相关资源
    最近更新 更多