Игра с "этим" в Javascript


Дано:

    var q = {};
    q.id = 1234;
    q.bonus = {
        'a':{
            'b':(function(){
                //i want to access q.id
                var id = this. ??? .id
            }),
        }
    };

Что должно быть ??? чтобы получить доступ q.id.

3 3

3 ответа:

Для доступа к q.id в функции, связанной с b, Используйте функцию .прототип.bind

var q = {};
q.id = 1234;
q.bonus = {
  'a':{
     'b': (function(){
       //i want to access q.id
       var id = this.id;
       console.log(id);
     }).bind(q),
  }
};

q.bonus.a.b();

Можно также использовать функцию .прототип.вызов для изменения контекста this

q.bonus.a.b.call(q);

Вы можете использовать call или apply для изменения значения "this".

var q = {};
q.id = 1234;
q.bonus = {
    'a':{
        'b':(function(){
            //i want to access q.id
            var id = this.id
        }.call(q)),
    }
};

Как вы можете видеть из других ответов и комментариев, любое решение предполагает обращение к q по имени. Поэтому я просто использую q.id напрямую.