На этом шаге мы рассмотрим способы описания свойств и методов скриптлета.
В скриптлетах все свойства и методы, явно не объявленные открытыми, считаются закрытыми. Как и в любом HTML-документе, элементы <SCRIPT> - локальные для документа, в котором они определены.
Существует два способа объявления открытых свойств и методов. Первый заключается в простом добавлении приставки public_ к именам всех открытых свойств и методов. Открытые свойства можно также определить, объявив их как функции с приставками public_get_ или public_put_. Это позволяет более тонко управлять свойством - например, Вы можете создать свойство только для чтения, определив функцию public_get() и отказавшись от функции public_put().
В следующем примере приведен простой скриптлет, содержащий элемент с идентификатором p1. В блоке сценария после этого элемента предоставляются свойства text и color, задаваемые функциями get() и set(). Скриптлет также предоставляет функцию animate().
<HTML> <HEAD></HEAD> <BODY> <FONT ID="f1" color="black"> <P ID="p1">Это абзац текста.</P> </FONT> <SCRIPT LANGUAGE="JavaScript"> var public_text = p1.innerText; function public_get_color() { return f1.color; } function public_put_color(color) { f1.color = color; } function public_animate() { // Код, выполняющий анимацию } </SCRIPT> </BODY></HTML>
Если в странице-клиенте объявить экземпляр этого объекта с именем MyScriptlet (ниже показано, как это сделать), то станут доступными все перечисленные ниже операции JavaScript:
MyScriptlet.text = "Hello"; . . . MyScriptlet.animate(); . . . var OldColor = MyScriptlet.color; . . . MyScriptlet.color ="blue";
Другая методика определения открытого интерфейса скриптлета состоит в применении объекта public_description языка JavaScript. Создается JavaScript-конструктор с объявлением открытых свойств и методов скриптлета, который затем присваивается объекту скриптлета public_description. Таким образом, свойства и методы скриптлета, не объявленные в конструкторе, остаются закрытыми.
Скриптлет из предыдущего примера, созданный этим способом, выглядит так:
<HTML><HEAD></HEAD> <BODY> <FONT ID="f1" color="black"> <P ID="p1">Это абзац текста.</P> </FONT> <SCRIPT LANGUAGE="JavaScript"> public_description = new CreateScriptlet(); function CreateScriptlet() { this.text = p1.innerText; // Свойство text this.put_color = putcolor; // Свойство соlor (запись) this.get_color = getcolor; // Свойство color (считывание) this.animate = doAnimation; // Метод animate() } function getcolor() { return f1.color; } function putcolor(color) { f1.color = color; } function doAnimation() { // Код, выполняющий анимацию } </SCRIPT> </BODY></HTML>
Имя конструктора (оно может быть любым) присваивается объекту public_description. В приведенном выше примере конструктор CreateScriptlet() определяет свойства text и color, задавая значение свойства text и определяя имена закрытых функций getcolor() и putcolor(), служащих для считывания и задания значения свойства color. Конструктор также определяет метод animate() и имя закрытой функции doAnimation(), реализующей этот метод.
Способ с public_description применяют в основном разработчики, опытные в области объектно-ориентированного программирования. Он позволяет четко разделить интерфейс и его реализацию, а также компактно определить интерфейс скриптлета, разместив его в одном месте (обычно - в начале блока <SCRIPT>).
На следующем шаге мы рассмотрим события скриптлета.