Кролик в шляпе. Как достать переменную из созданного объекта?

Есть код.
"use strict"
var rabbit = "Где кролик?";
var hat = new function(){
      var rabbit = "Вот он, кролик";
}
var why = function(){console.log(rabbit)};


Можно ли как-то достать переменную из объекта используя функцию why?

__________________________________________

Перечисленные ниже ответы верны. Здесь я просто подытожу.

Достать кролика из шляпы возможно. Для этого нам понадобится волшебная палочка.

Вот итоговый код:
"use strict"
var rabbit = "Где кролик?";
var hat = new function(){
      var rabbit = "Вот он, кролик";
      this.toString = function(){
           return rabbit
      }
}
alert(rabbit);
alert(hat);


Как было сказано ниже, сборщик мусора удаляет внутреннюю переменную после выполнения функции (var перекрывает внешнюю переменную создавая внутреннюю), тем более если она не использовалась.
Поэтому ее надо куда-то записать. У нас это будет toString (строковое представление объекта), который и покажет нам кролика в шляпе.
  • Вопрос задан
  • 259 просмотров
Решения вопроса 3
@lemme
Frontend
просто оставлю эту ссылку
https://learn.javascript.ru/functions-closures
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
нет, поскольку на переменную никто не ссылается, она будет уничтожена после завершения работы конструктора. И это не говоря о том что переменная определена в другой области видимости к которой вы не можете получить доступ.
Ответ написан
Ivanq
@Ivanq
Знаю php, js, html, css
1. Функции не нужно создавать с помощью new function(), просто используйте function(){...}
2. У вас уже объявлено var rabbit = "Где кролик?";. Соответственно, в функции var rabbit писать не нужно, пишите rabbit.
Подробнее:
var говорит, что эта переменная видна самой функции и ее внутренностям.
Когда Вы ввели var rabbit = "Вот он, кролик";, переменная создалась в области видимости функции hat, а в коде why она не видна. Убираем var - переменной rabbit, которая видна функциям hat и why, присваивается "Вот он, кролик"

UPD https://learn.javascript.ru/functions-closures
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы