Страницы

Поиск по вопросам

четверг, 8 ноября 2018 г.

Почему this в onclick необязателен?

Почему в onclick работает innerHTML^=1, хотя по идее должно быть this.innerHTML^=1?
/* ignore css */ p { float: left; font-size: 4em; width: 2em; line-height: 2em; border: 1px solid; text-align: center; margin: 0; cursor: pointer; background: silver; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } p + p { margin-left: .125em; }

0

0


Ответ

Внутренний сырой неоткомпилированный обработчик это тупль со следующей информацией:
Неоткомпилированное тело скрипта Место происхождения тела скрипта, если необходимо сообщить об ошибке
Когда пользовательский агент(ПА) получает текущее значение обработчика события H, он должен выполнить эти шаги:
Если значение H – внутренний сырой неоткомпилированный обработчик, выполнить эти подшаги:
Если H это обработчик события элемента, то пусть element это элемент, а document – Document элемента.
Иначе, H это обработчик события объекта Window: пусть element будет null, и пусть document это Document, ассоциированный самым последним с этим Window-объектом. Если document – не в контексте браузинга, или если скриптинг включён для контекст браузинга document'а, тогда возвратить null и прервать алгоритм получения текущего значения обработчика события. Пусть body это неоткомпилированное тело скрипта во внутреннем сыром неоткомпилированном обработчике. Пусть location это место, из которого происходит тело скрипта, как задано внутренним сырым неоткомпилированным обработчиком. Если element – не null и element имеет владельца формы, пусть form owner это владелец формы. Иначе – пусть form owner будет null. Пусть script settings это объект настроек скрипта, созданный для объекта Window, с которым document в настоящее время ассоциирован. Получить окружение выполнения скрипта для JavaScript из script settings Если body не разбирабельно как FunctionBody, или если при парсинге выявляется ошибка early error, тогда следовать этим подшагам:
Установить H со значением null. Сообщить об ошибке для соответствующего script со соответствующей позицией (номер строки и номер столбца), заданной в location, используя глобальный объект, специфицированный в script settings, в качестве цели. Если ошибка по-прежнему не обработана после этого, тогда о ней можно сообщить пользователю. Перескочить ниже на шаг end.
Примечание: FunctionBody определена в ECMAScript edition 5 section 13 Function Definition. Ошибка Early error определена в ECMAScript edition 5 section 16 Errors. [ECMA262] Если body начинается с Directive Prologue, содержащего Use Strict Directive, тогда пусть strict будет true, иначе – пусть strict будет false.
Примечание: Термины "Directive Prologue" и "Use Strict Directive" определены в ECMAScript edition 5 section 14.1 Directive Prologues and the Use Strict Directive. [ECMA262] Используя окружение выполнения скрипта, полученное выше, создать объект функции (как определено в ECMAScript edition 5 section 13.2 Creating Function Objects), с:
Списком параметров FormalParameterList
Если H это обработчик события onerror объекта Window
Пусть функция имеет 5 аргументов: event, source, lineno, colno и error Иначе:
Пусть функция имеет один аргумент event Тело функции FunctionBody:
Результат парсинга body выше. Лексическое окружение Scope
Пусть Scope это результат NewObjectEnvironment(document, global environment). Если form owner не null, пусть Scope это результат NewObjectEnvironment(>form owner, Scope). Если element не null, пусть Scope это результат NewObjectEnvironment(element, Scope).
Примечание: NewObjectEnvironment() определена в ECMAScript edition 5 section 10.2.2.3 NewObjectEnvironment (O, E). [ECMA262] Булев флаг Strict
Значение strict Пусть function это данная новая функция. Пусть script это новый скрипт. Пусть кодовой точкой входа script'а будет function Пусть объектом настроек script'а будет script settings Установить H в function End: Возвратить значение H.

Комментариев нет:

Отправить комментарий