JavaScript основан на простом объектно-ориентированном примере. Объект - это конструкция со свойствоми, которые являются переменными JavaScript. Свойства могут быть другими объектами. Функции, связанные с объектом известны как методы объекта.
В дополнение к объектам, которые сформированы в Navigator client и LiveWire server, вы можете определять ваши собственные объекты.
Объект JavaScript имеет свойства ассоциированные с ним. Вы обращаетесь к свойствам объекта следующей простой системой обозначений:
objectName.propertyName
И имя объекта и имя свойства чувствительны к регистру. Вы определяете свойства, приписывая значение. Например, пусть существует объект, с именем myCar (мы обсудим, как создавать объекты позже - теперь, только принимаем, что объект уже существует). Вы можете дать свойства, именованные make , model , и year следующим образом:
myCar.make = "Ford"
myCar.model = "Mustang"
myCar.year = 69;
Вы можете также обратиться к этим свойствам, используя систему обозначений таблицы следующим образом:
mycar["make"] = "Ford
myCar["model"] = "Mustang"
myCar["year"] = 69;
Этот тип таблицы известен как ассоциативная таблица, потому что каждый элемент индекса также связан со значением строки. Чтобы пояснять, как это делается, следующая функция показывает свойство объекта, когда вы проходите объект и имя объекта как аргументы функции:
Так, обращение к функции show_props(myCar, "myCar") возвращает следующее:
myCar.make = Ford
myCar.model = Mustang
myCar.year = 67
Вы можете также определять свойства, используя порядковые числа, например:
temp[0] = 34
temp[1] = 42
temp[2] = 56
Эти утверждения создают три свойства объекта temp, и вы должны обращаться к этим свойствам как temp[i], где i - целое число между 0 и 2.
Функции - один из фундаментальных встроенных блоков в JavaScript. Функция - JavaScript процедура - набор утверждений, которые выполняют определенную задачу.
Определение функции состоит из ключевого слова function , сопровождаемого
Вы можете использовать любые функции, определенные в текущей странице. Лучше всего определять все ваши функции в HEAD
страницы. Когда пользователь загружает страницу, сначала загружаются функции.
Утверждения в функциях могут включать другие обращения к функции.
Например, есть функция с именем pretty_print:
Эта функция принимает строку как аргумент, прибавляет некоторые теге HTML, используя оператор суммы (+), затем показывает результат в текущем документу.
Определение функции не выполняет ее. Для этого вы должны вызвать функцию, чтобы выполнить ее. Например, вы можете вызывать функцию pretty_print следующим образом:
Аргументы функции не ограничены только строками и числами.
Аргументы функции сохраняются в таблице. Внутри функции, вы можете адресовать параметры следующим образом:
functionName.arguments [i]Где functionName - имя функции, и i - порядковое число аргумента, начинающегося с нуля. Так, первый аргумент в функции, с именем myfunc, будет myfunc.arguments [0]. Общее число аргументов обозначено переменным arguments.length.
Функция может даже быть рекурсивной, то есть она может вызывать себя. Например, существует функция, которая вычисляет факториалы:
function factorial(n) {
if ((n == 0) || (n == 1))
return 1
else {
result = (n * factorial(n-1) )
return result
}
}
Вы можете показывать факториалы от одного до пять следующим образом:
for (x = 0; x < 5; x++) {
document.write(x, " factorial is ", factorial(x))
document.write("
")
}
Результаты будут бы следующие:
факториал нуля - 1
факториал единицы- 1
факториал двойки - 2
факториал тройки - 6
факториал четверки - 24
факториала пятерки - 120
Вы можете вызывать, функция с большим количеством аргументов чем она формально объявлена, используя массив arguments . Это часто полезно тогда, когда вы не знаете заранее, сколько аргументов будут в функции. Вы можете использовать arguments.length, чтобы определить число аргументов в функции, и затем обращаться к каждому аргументу, используя массив arguments .
Например, рассмотрим функцию, определенную, чтобы создать списки HTML.
Единственый формальный аргумент функции - строка, которая является "U", если список неупорядочен или "O", если список упорядочен (пронумерован). Функция определена следующим образом:
Вы можете проходить любое число аргументов этой функции, и затем показывать каждый аргумент как каждый отдельный пункт в обозначенном типе списка. Например, следующий запрос на функцию:
list("o", "one", 1967, "three", "etc, et
Метод - функция, связанная с объектом. Вы определяете метод таким же образом, так как вы определяете стандартную функцию. Затем, используйте следующий синтаксис, чтобы связать функцию с существующим бъектом:
object.methodname = function_name
Где object - существующий объект, methodname - имя, которое вы присваиваете методу, и function_name - имя функции.
Вы можете вызывать метод в контексте объекта следующим образом:
object.methodname (params);
JavaScript имеет специальное ключевое слово, this, которое вы можете использовать, чтобы обращаться к текущему объекту. Например, пусть у вас есть функция с именем validate , которая проверяет правильность свойства значения объекта, данного объект, и high и low значения:
function validate(obj, lowval, hival) {
if ((obj.value < lowval) || (obj.value > hival))
alert("Invalid Value!")
}
Вы можете вызывать validate в каждом элементе формы обработчика событий onChange, используя this, как показано в следующем примере:
Вообще, метод this обращается к вызывающему объекту.
И клиент и сервер JavaScript имеют строки предопределенных объектов. Кроме того, вы можете создавать ваши собственные объекты. Создание вашего собственного объекта требует двух шагов:
Чтобы определять тип объекта, создайте функцию для типа объекта, которая определяет его имя, и его свойства и методы. Например, пусть вы хотите создавать тип объекта для автомобилей. Вы хотите этот тип объектов, который будет назван car, и Вы хотите, чтобы он имел свойства для make, model, year, и color. Чтобы сделать это, вы должны написать следующую функцию:
function car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
Замечание, используйте this, чтобы присвоить значения свойствам объекта, основанные на значениях функции.
Теперь вы можете создавать объект, с именем mycar следующим образом:
mycar = new car("Eagle", "Talon TSi", 1993);
Это утверждение создает mycar и присваивает ему указанные значения для его свойств. Затем значение mycar.make
- строка "Eagle", mycar.year
- целое число 1993, и так далее.
Вы можете создавать любое число объектов car запрашивая к new. Например,
kenscar = new car("Nissan", "300ZX", 1992)
Объект может иметь свойство, которое является самостоятельным другим объектом. Например, пусть вы определили объект с именем person следующим образом:
function person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
И затем подтверждаете два новых объектов person следующим образом:
rand = new person("Rand McNally", 33, "M")
ken = new person("Ken Jones", 39, "M")
Затем вы можете перезаписать определение car, чтобы включить свойство владельца, которое берет объект person, следующим образом:
function car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.owner = owner;
}
Затем вы используете следующее:
car1 = new car("Eagle", "Talon TSi", 1993, rand);
car2 = new car("Nissan", "300ZX", 1992, ken)
Заметим, что вместо прохождения строкового литерала или целого числа вычисляет при создании новых объектов, вышеупомянутый ход утверждений объектов rand и ken как аргументов владельцев. Затем, если вы хотите выяснять имя владельца car2, вы можете обращаться к следующему свойству:
car2.owner.name
Заметьте, что вы можете всегда прибавлять свойства к предопределенному объекту. Например, утверждение:
car1.color = "black"
Прибавляет свойство color к car1, и присваивает ему значение " black". Однако, это не воздействует на любые другие объекты. Чтобы прибавить новое свойство ко всем объектам того же самого типа, вы должны прибавить свойство к определению типа объекта car.
Вы можете определять методы для типа объекта включением определение метода на определении типа объекта. Например, пусть у вас есть набор файлов изображений GIF, и вы хотите определить метод, который показывает информацию для car, наряду с соответствующим изображением. Вы можете определить функцию типа:
function displayCar() {
var result = "A Beautiful " + this.year
+ " " + this.make + " " + this.model;
pretty_print(result)
}
Где pretty_print - предопределенная функция, которая показывает строку. Используйте this, чтобы обратиться к объекту, который принадлежит методу.
Вы можете делать функцию методом из car, прибавляя утверждение
This.displayCar = displayCar;к определению объекта. Так, полное определение car теперь выглядит так:
function car(make, model, year, owner) { this.make = make; this.model = model; this.year = year; this.owner = owner; this.displayCar = displayCar; }
Вы можете вызывать этот новый метод следующим образом:
car1.displayCar ()
car2.displayCar ()
Это будет выглядеть подобно следующему выводу: