Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

Но сценарии в обоих фреймах должны явно ссылаться на конструктор

Set
, как на свойство родительского окна:

var s = new parent.Set;

В качестве альтернативы сценарий в любом фрейме может определить собственные переменные для более удобного обращения к функции-конструктору:

var Set = top.Set;

var s = new Set;

В отличие от пользовательских классов, предопределенные классы, такие как

Set
,
Date
и
RegExp
, оказываются автоматически определенными во всех окнах. Однако следует заметить, что каждое окно имеет независимую копию конструктора и независимую копию объекта-прототипа. Например, каждое окно имеет собственную копию конструктора
String
и объекта
String.prototype
. Поэтому, если вы создадите новый метод для работы с JavaScript-строками и сделаете его методом класса
String
, присвоив его объекту
String.prototype
в текущем окне, все строки в этом окне смогут использовать новый метод, однако этот новый метод будет недоступен строкам, определенным в других окнах.

Тот факт, что каждый объект

Window
имеет собственные объекты-прототипы, означает, что оператор
instanceof
не будет работать с объектами в разных окнах. Например, оператор
instanceof
будет возвращать
false
при сопоставлении строки из фрейма В с конструктором
String
из фрейма А. В разделе 7.10 описываются похожие сложности с определением типов массивов в разных окнах.

Объект WindowProxy

Мы неоднократно отмечали, что в клиентском JavaScript объект Window является глобальным объектом. Однако если смотреть с технической точки зрения, это не так. Каждый раз, когда веб-броузер загружает содержимое в окно или фрейм, он должен создать новый контекст выполнения JavaScript, включая и новый глобальный объект. Но при наличии нескольких взаимодействующих окон или фреймов очень важно обеспечить сохранность ссылки на объект

Window
, представляющий фрейм или окно, даже если в этот фрейм или окно загружается новый документ.

Таким образом, в клиентском JavaScript имеется два объекта, играющих важную роль. Первый - это клиентский глобальный объект, который находится на вершине цепочки областей видимости и в котором определяются глобальные переменные и функции. Этот глобальный объект действительно замещается новым объектом, когда в окно или фрейм загружается новый документ. Второй объект, который мы называем объектом

Window
, в действительности не является глобальным объектом - это промежуточный объект. Всякий раз, когда сценарий читает или изменяет значение свойства объекта
Window
, этот объект запрашивает или изменяет свойство с тем же именем глобального объекта окна или фрейма. В спецификации HTML5 этот промежуточный объект называется объектом
WindowProxy
, но далее в этой книге мы продолжим использовать имя
Window
.

Этот промежуточный объект ведет себя как настоящий глобальный объект, за исключением того, что живет гораздо дольше. Если бы вы могли сравнить эти два объекта, вы едва ли смогли бы отличить их. Однако на самом деле нет никакой возможности сослаться на настоящий клиентский глобальный объект. Глобальный объект находится на вершине цепочки областей видимости, но свойства

window, self, top, parent
и
frames
ссылаются на промежуточные объекты. Метод
window.open
возвращает промежуточный объект. Даже ключевое слово
this
в функциях верхнего уровня ссылается на промежуточный объект, а не на настоящий глобальный объект. [33] 1

33

Этот последний пункт является небольшим отступлением от стандартов ES3 и ES5, но это необходимо для поддержки взаимодействующих контекстов выполнения в клиентском JavaScript.

****************************************

15

Работа с документами

Клиентский JavaScript предназначен для того, чтобы превращать статические HTML-документы в интерактивные веб-приложения. Работа с содержимым вебстраниц - главное предназначение JavaScript. Данная глава является одной из наиболее важных в этой книге - здесь рассказывается о том, как это делается.

В главах 13 и 14 говорилось, что каждое окно, вкладка и фрейм веб-броузера представлено объектом

Window
. Каждый объект
Window
имеет свойство
document
, ссылающееся на объект
Document
. Этот объект
Document
и является темой обсуждения данной главы. Однако объект
Document
не является автономным объектом. Он является центральным объектом обширного API, известного как объектная модель документа (
Document Object Model, DOM
), который определяет порядок доступа к содержимому документа.

Эта глава начинается с описания базовой архитектуры DOM, а затем она расскажет:

• Как выбирать отдельные элементы документа.

• Как выполняется обход содержимого документа, представленного в виде дерева узлов, и как отыскивать в нем родительские, дочерние и братские элементы.

• Как читать и изменять значения атрибутов элементов документа.

• Как читать и изменять содержимое документа.

• Как изменять структуру документа, создавая, вставляя и удаляя узлы.

• Как работать с HTML-формами.

  • Читать дальше
  • 1
  • ...
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: