Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Методы объектов



Объекты JavaScript могут иметь не только свойства, но и методы. Методами объекта называют процедуры и функции, которые привязаны к данному объекту и могут быть использованы только в контексте взаимодействия с ним.

Чтобы создать метод, следует, прежде всего, написать функцию, которая будет его реализовывать, а затем указать его в конструкторе объекта. Допустим, нам не помешает функция, которая выводит в виде таблице все свойства автомобиля (вернее, объекта car). В таком случае сначала напишем такую функцию:

function displayCar() {

var str = "<table border=\"1\">";

str += "<tr><td>Производитель:</td><td>"+this.make+"</td></tr>";

str += "<tr><td>Модель:</td><td>"+this.model+"</td></tr>";

str += "<tr><td>Год выпуска:</td><td>"+this.year+"</td></tr>";

str += "<tr><td>Двигатель:</td><td>"+this.engine.cylinders+"-цилиндровый, "+this.engine.volume+"л.</td></tr>";

str += "</table>";

document.write(str);

}

Данная функция сначала создает строковую переменную str, в которую вносит все свойства объекта вместе с HTML-разметкой, а затем выводит эту строку в окно браузера. Обратите внимание, что к свойствам объекта функция обращается при помощи указателя this – такой синтаксис подразумевает, что данная функция будет методом объекта.

Теперь, когда у нас имеется функция, остается определить метод в самом объекте. Для этого достаточно добавить название функции к его описанию:

function car(vendor, model, year, engine) {

this.vendor = vendor;

this.model = model;

this.year = year;

this.engine = engine;

this.displayCar = displayCar;

}

Теперь, создав объект типа car, можно просто воспользоваться его собственным методом для того, чтобы вывести все параметры в виде таблицы:

var MyCar = new car("Ford", "Escort", 1997, new engine(1.3, 4));

MyCar.displayCar();

Результатом обращения к этому методу будет таблица с параметрами автомобиля

В JavaScript this всегда относится к «владельцу» выполняемой функции, или, если быть точнее, к объекту, методом которого является функция. Когда мы определяем нашу функцию doSomething() в глобальном пространстве, владельцем является страница или объект window (глобальный обект) JavaScript. Например, аттрибут «onclick» принадлежит тому элементу(объекту) HTML, к которому он относится.

Это «владение» — результат объектно-ориентированного подхода JavaScript.

------------ window --------------------------------------

| / \ |

| | |

| this |

| ---------------- | |

| | HTML element | <-- this ----------------- |

| ---------------- | | doSomething() | |

| | | ----------------- |

| -------------------- |

| | onclick property | |

| -------------------- |

| |

----------------------------------------------------------

Если мы напрямую выполним doSomething(), ключевое слово this будет относиться к окну, и функция попытается изменить style.color окна. Но так как у окна нет объекта style, функция завершается неудачей и вовзратит ошибку.

Копирование

Итак, для того, чтобы использовать this в полном объеме, нам нужно позаботится о том, чтобы «владельцем» функции, использующей this являлся правильный объект HTML. Например нам нужно скопировать функцию в наш аттрибут «onclick».

element.onclick = doSomething;

Функция полностью скопирована в аттрибут «onclick» (который теперь становится методом). Теперь при выполнении обработчика событий this относится к элементу HTML и его color поменяется.

------------ window --------------------------------------

| |

| |

| |

| ---------------- |

| | HTML element | <-- this ----------------- |

| ---------------- | | doSomething() | |

| | | ----------------- |

| ----------------------- | |

| |copy of doSomething()| <-- copy function |

| ----------------------- |

| |

----------------------------------------------------------

Конечно же мы можем скопировать функцию в несколько обработчиков событий сразу, будь то «onclick» или любые другие. Каждый раз this будет относиться к определенному элементу HTML:

------------ window --------------------------------------

| |

| |

| |

| ---------------- |

| | HTML element | <-- this ----------------- |

| ---------------- | | doSomething() | |

| | | ----------------- |

| ----------------------- | |

| |copy of doSomething()| <-- copy function |

| ----------------------- | |

| | |

| ----------------------- | |

| | another HTML element| <-- this | |

| ----------------------- | | |

| | | | |

| ----------------------- | |

| |copy of doSomething()| <-- copy function |

| ----------------------- |

| |

----------------------------------------------------------

Таким образом ключевое слово this используется наиболее эффективно. При каждом вызове функции, this относится к тому элементу HTML, который в этот момент обрабатывает событие, элемент HTML, «владеющий» копией doSomething().

Ссылки

Однако, если вы используете линейную регистрацию событий:

<element onclick= "doSomething()" >

Вы не делаете копии функции! Вместо этого вы обращаетесь к ней, и разница огромна! Аттрибут «onclick» не содержит саму функцию, а только ее вызов:

doSomething();

То есть он говорит «обратись к doSomething() и выполни ее». Обратившись к doSomething(), ключевое слово this относится к глобальному объекту window и функция возвращает сообщения об ошибках.

------------ window --------------------------------------

| / \ |

| | |

| this |

| ---------------- | |

| | HTML element | <-- this ----------------- |

| ---------------- | | doSomething() | |

| | | ----------------- |

| ----------------------- / \ |

| | go to doSomething() | | |

| | and execute it | ---- reference to |

| ----------------------- function |

| |

----------------------------------------------------------

Разница

Если вы хотите использовать this для доступа к HTML элементу, обрабатывающему событие, вам нужно убедиться, что ключевое слово this написано именно в аттрибуте «onclick». Только в этом случае оно относится к тому элементу HTML, к которому преписан обработчик событий. То есть если вы выполните

element.onclick = doSomething;

alert(element.onclick)

то получите

function doSomething()

{

this. style.color = '#cc0000';

}

Как вы видите, ключевое слово this находится в методе «onclick()». Следовательно, оно относится к элементу HTML.

Но если вы выполните

<element onclick= "doSomething()" >

alert(element.onclick)

то получите

function onclick()

{

doSomething()

}

Это только ссылка на функцию doSomething(). Ключевое слово this не находится в методе «onclick» и поэтому не относится к элементу HTML.

66. особенности строк и массивов язык javaScript

При работе на JavaScript со строками есть вероятность того, что вы столкнетесь с конфузом при попытке сравнить вроде-бы идентичные строки. А именно, если у вас при сравнении двух строк с одинаковыми значениями, результат получается противоположный, т.е браузер говорит вам что строки не совпадают, это вовсе не значит, что браузер сошел с ума:)

Дело в том, что в JavaScript сравнивается не только значение строки, но и сами объекты строк. Т.е чтобы строки совпали, они кроме одинакового значения, также должны принадлежать к одной инстанции.

Массив – это тип данных, содержащий или хранящий пронумерованные значения. Каждое пронумерованное значение называется элементом массива, а число, с которым связывается элемент, называется его индексом. Так как JavaScript – это нетипизированный язык, элемент массива может иметьлюбой тип и различные элементы одного массива могут иметь разный тип. Элементы массива могут даже содержать другие массивы, что позволяет создавать массивы массивов.

67.способы работы с удаленным сервером. Схема объединения отдельных сетей в общую составную сеть

а объединения отдельных сетей в общую составную сеть

Локальных сетей слишком много, поэтому реально объединяют автономные системы.

Автономная система (AS - autonomous system) - сеть находящаяся под одним административным контролем, это может быть несколько компьютеров или большая сеть (понятие достаточно условное)

Официальная документация по Internet

RFC (Request for Comments) - официальная документация по Internet, можно найти по адресу http://www.rfc-editor.org/ или http://www.ietf.org/rfc.html.

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

Адресация в сети Internet.

Типы адресов.

Компьютер в сети TCP/IP может имееть адреса трех уровней (но не менее двух):

? Локальный адрес компьютера. Для узлов, входящих в локальные сети - это МАС-адрес сетевого адаптера. Эти адреса назначаются производителями оборудования и являются уникальными адресами.

? IP-адрес, состоящий из 4 байт, например, 109.26.17.100. Этот адрес используется на сетевом уровне. Он назначается администратором во время конфигурирования компьютеров и маршрутизаторов.

? Символьный идентификатор-имя (DNS), например, www.kstu.ru.


68. официальная документация по интернет. Принципы организции dns


69. Введение

70. Система имен доменов (DNS - Domain Name System) это распределенная база данных, которая используется приложениями TCP/IP, для установления соответствия между именами хостов и IP адресами. DNS также используется для маршрутизации электронной почты. Мы используем термин распределенная, потому что на одном узле Internet не хранится вся необходимая информация. Каждый узел (университет, университетский городок, компания или отдел внутри компании) поддерживает собственую информационную базу данных и запускает программу сервер, которая может отправить запрос по Internet к другим системам. DNS предоставляет протокол, который позволяет клиентам и серверам общаться друг с другом.

71. С точки зрения приложения, доступ к DNS осуществляется посредством разборщика (resolver) (разборщик (resolver) - подпрограммы, которые используются для создания, отправки и интерпретации пакетов, используемых серверами имен Internet). В Unix системах, к разборщику можно получить доступ через две библиотечные функции, gethostbyname(3) и gethostbyaddr(3), которые линкуются с приложением, когда оно строится. Первая воспринимает в качестве аргумента имя хоста и возвращает IP адрес, а вторая воспринимает в качестве аргумента IP адрес и возвращает имя хоста. Разборщик устанавливает контакты с одним или несколькими серверами DNS (name servers), чтобы установить это соответствие.

72. На рисунке 4.2 показано, что разборщик - это часть приложения. Он не является частью ядра операционной системы как протоколы TCP/IP. Приложение должно конвертировать имя хоста в IP адрес, перед тем как оно попросит TCP открыть соединение или послать датаграмму с использованием UDP. Протоколы TCP/IP внутри ядра ничего не знают о DNS.

73. В этой главе мы рассмотрим, как разборщики общаются с DNS серверами с использованием протоколов TCP/IP (в основном UDP). Однако мы не будем рассматривать установку и администрирование DNS серверов или все опции, существующие у разборщиков и серверов. Это может составить еще одну книгу. (В публикации [Albitz and Liu 1992] приведены подробности функционирования стандартных Unix разборщиков и серверов DNS.)

74. RFC 1034 [Mockapetris 1987a] описывает концепции, лежащие в основе DNS, а RFC 1035 [Mockapetris 1987b] содержит подробности разработки и спецификации DNS. Наиболее широкоиспользуемая реализация DNS, как разборщика, так и сервера - BIND (Berkeley Internet Name Domain). Процесс сервера называется named. Анализ траффика, генерируемого DNS в глобальных сетях, приводится в [Danzig, Obraczka, and Kumar 1992].

75. Основы DNS

76. Пространство имен DNS имеет иерархическую структуру, которая внешне напоминает файловую систему Unix. На рисунке 14.1 показана иерархическая организация DNS.

77.

78. Рисунок 14.1 Иерархическая организация DNS.

79.

80. Каждый узел (кружочки на рисунке 14.1) имеет метку длиной до 63 символов. Корень дерева это специальный узел без метки. Метки могут содержать заглавные буквы или маленькие. Имя домена (domain name) для любого узла в дереве - это последовательность меток, которая начинается с узла выступающего в роли корня, при этом метки разделяются точками. (Здесь видно отличие от файловой системы Unix, где полный путь всегда начинается с вершины (корня) и опускается вниз по дереву.) Каждый узел дерева должен иметь уникальное имя домена, однако одинаковые метки могут быть использованы в различных точках дерева.

81. Имя домена, которое заканчивается точкой, называется абсолютным именем домена (absolute domain name) или полным именем домена (FQDN - fully qualified domain name). Например, sun.tuc.noao.edu.. Если имя домена не заканчивается на точку, подразумевается, что имя должно быть завершено. Как будет закончено имя, зависит от используемого программного обеспечения DNS. Если незаконченное имя состоит из двух или более меток, его можно воспринимать как законченное или полное; иначе справа от имени должен быть добавлен локальный суффикс. Например, имя sun может быть завершено локальным суффиксом.tuc.noao.edu..

82. Домены верхнего уровня поделены на три зоны:

83. arpa это специальный домен, используемый для сопоставления адрес - имя (раздел "Запросы указателя" этой главы).

84. Семь 3-символьных доменов называются общими (generic) доменами. В некоторых публикациях они называются организационными (organizational) доменами.

85. Все 2-символьные домены, основанные на кодах стран, можно найти в ISO 3166. Они называются доменами стран (country), или географическими (geographical) доменами.

86. На рисунке 14.2 приведен список обычной классификации семи основных доменов.

87.

88. Домен 89. Описание
90. com 91. коммерческие организации
92. edu 93. учебные организации
94. gov 95. правительственные организации США
96. int 97. международные организации
98. mil 99. военные организации США
100. net 101. сети
102. org 103. другие организации

104. Рисунок 14.2 3-символьные общие домены.

105.

106. Иногда считается, что 3-символьные общие домены используются только организациями Соединенных Штатов, а 2-символьные домены стран всеми остальными, однако это не так. Существуют неамериканские организации в основных доменах, и множество организаций в Соединенных Штатах находятся в домене страны.us. (RFC 1480 [Cooper and Postel 1993] описывает домен.us более подробно.) Единственные общие домены, которые закреплены за Соединенными Штатами, это.gov и.mil.

107. Многие 2-символьные домены стран второго уровня, очень похожи на основные домены:.ac.uk, например, принадлежит академическим институтам, а.co.uk коммерческим организациям Великобритании.

108. Одна важная характеристика DNS, не показанная на рисунке 14.1, это передача ответственности внутри DNS. Не существует организации, которая бы управляла и обслуживала все дерево в целом и каждую метку в отдельности. Вместо этого, одна организация (NIC) обслуживает только часть дерева (домены верхнего уровня), а ответственность за определенные зоны передает другим организациям.

109. Зона (zone) это отдельно администрируемая часть дерева DNS. Например, домен второго уровня noao.edu это отдельная зона. Многие домены второго уровня поделены на меньшие зоны. Например, университет может поделить свою зону на подзоны по факультетам, а компания может поделить себя на зоны по принципу деления на филиалы или отделы.

110.

111. Если Вы знакомы с файловой системой Unix, то обратите внимание, что деление дерева DNS на зоны очень напоминает деление на логические файловые системы физических дисковых разделов. Однако мы не можем сказать, основываясь на рисунке 14.1, под чьим руководством находятся зоны, также как мы не можем по подобному рисунку сказать, какие директории в файловой системе находятся в определенном дисковом разделе.

112.

113. С того момента, как выбрана организация или персона, которая несет ответственность за управление зоной, эта организация или персона должна организовать несколько серверов DNS (name servers) для этой зоны. Как только в зоне появляется новая система, администратор этой зоны помещает имя и IP адрес нового хоста в базу данных сервера DNS. В небольших университетах, например, один человек может делать это каждый раз при появлении новой системы, однако в больших университетах ответственность должна быть распределена (например, по департаментам), так как один человек не может осуществлять эту работу в целом.

114. Сервер DNS, скажем, обслуживает одну зону или несколько зон. Человек, который несет ответственность за зону, администрирует основной сервер DNS (primary name server) для этой зоны и один или нескольковторичных серверов DNS (secondary name servers). Первичный и вторичный сервера должны быть независимы и избыточны таким образом, чтобы система DNS не вышла из строя при отказе одного из серверов.

115. Основное отличие между первичными и вторичными серверами заключается в том, что первичные загружают всю необходимую информацию из дисковых файлов, тогда как вторичные получают информацию от первичного. Процесс передачи информации от первичного сервера вторичному называется передачей зоны (zone transfer). Когда в зоне появляется новый хост, администратор добавляет соответствующую информацию (минимум, имя и IP адрес) в дисковый файл на первичном сервере. После чего первичный сервер DNS уведомляется о необходимости повторно считать свои конфигурационные файлы. Вторичные сервера регулярно опрашивают первичные (обычно каждые 3 часа), и если первичные содержат новую информацию, вторичный получает ее с использованием передачи зоны.

116. Что произойдет, если сервер DNS не содержит необходимой информации? Он должен установить контакт с другим сервером DNS. (В этом заключается распределенная природа DNS.) Однако не каждый сервер DNS знает, как обратиться к другому серверу. Вместо этого каждый сервер DNS должен знать, как установить контакт с корневыми серверами DNS (root name servers). В апреле 1993 года существовало восемь корневых серверов, все первичные сервера должны знать IP адреса каждого корневого сервера. (Эти IP адреса находятся в конфигурационных файлах первичного сервера. Первичные сервера должны знать именно IP адреса корневых серверов, а не их DNS имена.) Корневой сервер, в свою очередь, знает имена и положения (IP адрес) каждого официального сервера DNS для всех доменов второго уровня. При этом возникает последовательный процесс: запрашивающий сервер должен установить контакт с корневым сервером. Корневой сервер сообщает запрашивающему серверу о необходимости обратиться к другому серверу и так далее. Мы рассмотрим эту процедуру и соответствующие примеры позже в этой главе.

117.

118. Вы можете получить текущий список корневых серверов, воспользовавшись анонимным (anonymous) FTP. Получите файл netinfo/root-servers.txt с ftp.rs.internic.net или nic.ddn.mil.

119.

120. Фундаментальная характеристика DNS - это кэширование (caching). Когда DNS сервер получает информацию о соответствии (скажем, IP адресов именам хостов), он кэширует эту информацию таким образом, что в случае следующего запроса может быть использована информация из кэша, дополнительный запрос на другие сервера не делается. В разделе "Кэширование" этой главы мы рассмотрим кэширование более подробно.

121. Формат сообщения DNS

122. Для DNS запроса и для DNS отклика используется одинаковый формат. На рисунке 14.3 показан общий формат DNS сообщения.

123.

124. Рисунок 14.3 Общий формат DNS запроса и ответа.

125.

126. Сообщение содержит фиксированный 12-байтный заголовок, за которым следуют четыре поля переменной длины.

127. Значение в поле идентификации (identification) устанавливается клиентом и возвращается сервером. Это поле позволяет клиенту определить, на какой запрос пришел отклик.

128. 16-битовое поле флагов (flags) поделено на несколько частей, как показано на рисунке 14.4.

129.

130. Рисунок 14.4 Поле флагов (flags) в заголовке DNS.

131.

132. Описание каждого поля мы начнем с крайне левых битов.

133. QR (тип сообщения), 1-битовое поле: 0 обозначает - запрос, 1 обозначает - отклик.

134. opcode (код операции), 4-битовое поле. Обычное значение 0 (стандартный запрос). Другие значения - это 1 (инверсный запрос) и 2 (запрос статуса сервера).

135. AA - 1-битовый флаг, который означает "авторитетный ответ" (authoritative answer). Сервер DNS имеет полномочия для этого домена в разделе вопросов.

136. TC - 1-битовое поле, которое означает "обрезано" (truncated). В случае UDP это означает, что полный размер отклика превысил 512 байт, однако были возвращены только первые 512 байт отклика.

137. RD - 1-битовое поле, которое означает "требуется рекурсия" (recursion desired). Бит может быть установлен в запросе и затем возвращен в отклике. Этот флаг требует от DNS сервера обработать этот запрос самому (т.е. сервер должен сам определить требуемый IP адрес, а не возвращать адрес другого DNS сервера), что называется рекурсивным запросом (recursive query). Если этот бит не установлен и запрашиваемый сервер DNS не имеет авторитетного ответа, запрашиваемый сервер возвратит список других серверов DNS, к которым необходимо обратиться, чтобы получить ответ. Это называетсяповторяющимся запросом (iterative query). Мы рассмотрим примеры обоих типов запросов в следующих примерах.

138. RA - 1-битовое поле, которое означает "рекурсия возможна" (recursion available). Этот бит устанавливается в 1 в отклике, если сервер поддерживает рекурсию. Мы увидим в наших примерах, что большинство серверов DNS поддерживают рекурсию, за исключением нескольких корневых серверов (коневые сервера не в состоянии обрабатывать рекурсивные запросы из-за своей загруженности).

139. Это 3-битовое поле должно быть равно 0.

140. rcode это 4-битовое поле кода возврата. Обычные значения: 0 (нет ошибок) и 3 (ошибка имени). Ошибка имени возвращается только от полномочного сервера DNS и означает, что имя домена, указанного в запросе, не существует.

141. Следующие четыре 16-битных поля указывают на количество пунктов в четырех полях переменной длины, которые завершают запись. В запросе количество вопросов (number of questions) обычно равно 1, а остальные три счетчика равны 0. В отклике количество ответов (number of answers) по меньшей мере равно 1, а оставшиеся два счетчика могут быть как нулевыми, так и ненулевыми.





Дата публикования: 2015-01-25; Прочитано: 443 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.018 с)...