2014-11-04 8 views
0

Я читаю через http://javascriptissexy.com/understand-javascripts-this-with-clarity-and-master-it/ и пытаюсь лучше понять «это».Доступ к данным объекта с помощью forEach, без использования forAach's thisArg?

Однако я столкнулся с чем-то, что меня сбивает с толку: я не могу получить доступ к данным объекта (в данном случае объекта «пользователь»), не используя аргумент «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, получить доступ к информации об объекте без использования этогоArg? Или, может быть, что эквивалентно «человеку», написанному долго?

+1

'user.data' является массивом. Попробуйте 'console.log (user.data [0] .name);' вместо – friedi

+0

@friedi Спасибо, это действительно сработало. Однако, поскольку это цикл forEach, есть ли способ распечатать оба имени? Или это то, где thisArg становится необходимым, или цикл «for» внутри цикла forEach? EDIT: Хорошо, тантал сказал «нет» ниже. – Terf

ответ

1

По MDN's forEach documentation:

Если параметр thisArg предоставляется forEach, он будет передан на обратный вызов при вызове, для использования в качестве своей это значение. В противном случае значение undefined будет передано для использования в качестве его значения.

Так что нет возможности «вернуться назад» и получить доступ к информации об объекте без использования thisArg.

+0

Спасибо, я прочитал это, но не совсем понял, что это значит. – Terf

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/

Надежда я помочь

 Смежные вопросы

  • Нет связанных вопросов^_^