Задать вопрос
@jondoeonoe

Почему будет именно такой результат?

var text = 'one';

function test () {
  console.log(this.text);
}

var a = {
  text: 'two',
  log() {
    a.test = test;

    var b = {
      text: 'three',
      log() {
        a.test();
      }
    };

    b.log();
  }
};

a.log();


Добрый день. Я бы хотел точнее и лучше понять, почему будет именно такой ответ и прав ли я.
В общем,
В a.test мы передали функцию нашу test. Теперь для функции тест зис текст будет два. И как мне кажется, не важно что мы вызвали ее в объекте b. Все равно ее контекст зиса будет объект a => two. Если бы мы уже в объекте b -> методе log сделали бы типо b.kek = a.test; b.kek(), то скорее всего уже было бы три.
Но я все равно сомневаюсь в этом, у нас же объекты не могут просто как примитивы переприсвоиться (a.test = test), а ссылку всего - то на функцию кидают, ведь функци это объект, нет? То есть, зис даже в случае ссылки будет иметь в виду контекст объекта a? Но я все же больше склоняюсь к ответу два.
Я бы хотел послушать как верно в данном случае рассуждать
  • Вопрос задан
  • 81 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 1
dimmond_pro
@dimmond_pro
Jedi
Если у функции нет жестко определнного контекста, как в данном случае, то вызов ее в контексте объекта даже после передачи путем ссылки будет происходить с указанием на текущий объект
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы