Doc says:
Специальная __caller__ свойство, которое возвращается объект активации вызывающего абонента таким образом, что позволяет восстановить стек, был удален по соображениям безопасности.
И легко понять, почему это может быть катастрофой безопасности в браузере, где большая часть пользовательского интерфейса реализована в JavaScript. Представьте, что у вас есть одна из ваших функций, называемая дополнительным или другим хром. Вы можете искать стек вызовов и считывать (потенциально чувствительные) переменные, или даже вводить значения JavaScript в функции вызывающего абонента, потенциально подрывая их, чтобы что-то делать с пожеланиями пользователя. Эффективно каждая веб-страница получит хром-привилегии безопасности и полностью скомпрометирует браузер.
Вы, конечно, никогда не должны использовать его в реальном JavaScript, потому что это была нестандартная деталь реализации Mozilla, не говоря уже о невероятно уродливой. У вас нет лексического поведения, которое вы обычно ожидаете от JS.
Я не могу получить доступ к глобальному контексту самого браузера, используя 'this'. Обнаружение безопасности, о котором вы описали, казалось легко устраненным, никогда не устанавливая '__caller__' в глобальной области видимости, поэтому никогда не предоставляйте ссылку на привилегированный код. Поэтому я не вижу проблемы, которая заставляет меня задавать этот вопрос. –
У вас есть лексические области и стек вызовов запутался. '__caller__' будет переходить через стек вызовов; он никогда не должен достигать объекта активации, соответствующего глобальному охвату. – bobince
Мой плохой. «... никогда не устанавливая его, когда он предоставляет ссылку на привилегированный код». Это небезопасная катастрофа, если песочница просто тривиально. Или это почему-то нетривиально? –