Это похоже на Python.Причина проста: вы не можете добавить , потому что это вступает в противоречие с правилом области видимости по умолчанию для поиска нелокальных переменных во внешних областях.Это возможно в статически типизированных языках, потому что члены this
известны во время компиляции.
А что, если принять динамическое решение, такое как "x
относится к this.x
если this.x !== undefined
и в противном случае переменная x
"(или любое другое правило для этого, которое решается во время выполнения)?Это очень опасно, поскольку может скрывать локальные переменные в зависимости от того, что происходит с this
, то есть нарушать совершенно корректный код только для определенных объектов.Другая проблема: должен ли undeclaredVar = ...
добавить новый атрибут экземпляра?Если нет, то это была бы ужасная асимметрия между явным и неявным this
.Если он создаст атрибут экземпляра, вы потеряете возможность устанавливать глобальные и закрывающие переменные изнутри функций - не слишком большая потеря, многие скажут;но разработчики JS, похоже, думали иначе, поскольку они выбрали глобальную область видимости по умолчанию.
Создание «случайных переменных» атрибутов теневого экземпляра было бы менее опасным, но с глубоко вложенными областями, заполненными множеством имен, вы 'Вероятно, в конечном итоге он вынужден будет использовать this.
, так что меньше чистого выигрыша.По этой причине и / или, вероятно, по другим причинам дизайнеры сочли ярлык недопустимым.