ActionScript 3: Класс Object и создание объектов

Класс Object — базовый класс в ActionScript, все остальные (структурные и простые классы) — это расширения класса Object.

Object — это динамический класс, что позволяет добавлять ему новые свойства и методы.

Создание объектов в ActionScript 3

Существует два способа создания объектов в ActionScript 3. Наиболее распространенный способ имеет следующий синтаксис:

var objectName:Object = new Object();

- "objectName" становится объектом, к которому можно добавлять свои собственные свойства и методы.

Другой способ создания объекта имеет следующий синтаксис:

var objectName:Object = {prop1:val1, prop2:val2, ...}

— "prop1", "prop2" представляют свойства объекта "objectName", а "val1" , "val2" — их значения.

Вы можете добавлять столько пар «свойство: значение» через запятую сколько хотите. Если значение имеет строковой тип String, то оно должно быть записано в кавычках, в отличие от цифровых значений.

Такой способ обычно используется, когда соответствующий объект содержит простой список данных.

Добавление свойств и обращение к ним

Как только вы создали объект при помощи "new Object();", то вы можете определить его свойства. Самый распространенный способ определения свойств объекта это использование оператора точки:

objectName.property_name = value;

Другой способ — использование квадратных скобок (как в ассоциативном массиве):

objectName['property_name'] = value;

- Когда используются квадратные скобки, имя свойства должно быть записано в кавычках (простых или двойных).

- "value" может быть числом, строкой (в кавычках), переменной, массивом, или даже свойством другого объекта.

  • Чтобы получить доступ к свойствам объекта, можно использовать оператор точки между именем объекта и свойством (Object.property), или свойство между квадратными скобками [] после имени объекта (Object["property"]).
  • Рекомендуется использовать какой-то один способ (без объединения) для лучшей ясности и понимания кода. В основном для объектов используется оператор точки, а квадратные скобки используются для элементов массива, что позволяет избегать путаницы.

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

// Создаем объект "obj"
var obj:Object = new Object();
// Определяем два свойства, первое при помощи оператора точки, второе при помощи []
obj.site = 'jwinters.ru';
obj['courses'] = 8; 

/*
Это объект также может быть создан при помощи синтаксиса с закругленными скобками
    var obj:Object = {site:"jwinters.ru", courses:8};
Представляет все тот же объект
*/

// Инициализируем экземпляр "TextField" 
var txt:TextField = new TextField();

// Добавляем в экземпляр "txt" текст, который содержит значения свойств "site" и "courses"
// Для "site" используем [], а для "courses" используем оператор точки
txt.text = obj["site"]+ ' - '+ obj.courses;

// используем "addChild()" чтобы добавить /отобразить текст в Flash 
addChild(txt);        // jwinters.ru - 8

Определение и вызов методов

В своей основе, методы — это функции. Разница между функциями и методами в том, что функцию можно вызывать напрямую по имени, а вызов метода происходит через объект (или экземпляр класса), в котором он определен.

Узнать про методы классов вы можете в справочнике AdobeFlash.

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

Синтаксис:

objectName.methodName = functionName;

— "functionName" может быть именем функции, которую вы создали, или функцией созданной напрямую в определении метода, как в следующем синтаксисе:

objectName.methodName = function():DataType { ... код функции };

Значение, полученное при вызове метода — это значение возвращенное функцией, связанной с соответствующим методом.

Вот пример. Мы создаем объект со свойством (id) и двумя методами. Для первого метода ("getSum()") мы назначили функцию, созданную отдельно, а для второго метода ("getID()") функция создана напрямую в определении метода.

// Создаем функцию, которая будет связана с методом
function f_sum(a:Number, b:Number):String
{
  var sum:Number = a+b;
  return 'The sum is: '+ sum;
}

// Определяем объект "obj2" со свойством "id", и два метода "getSum" и "getId"
var obj2:Object = new Object();
 obj2.id = 'tutorials';
 obj2.getSum = f_sum;
 obj2.getId = function():String {
    var idul = 'Id: '+ this.id;
    return idul;
  };

// Инициализируем экземпляр "TextField"в переменной "txt2" 
var txt2:TextField = new TextField();

// Добавляем в экземпляр "txt2" текст, который содержит значения, возвращенные методами "getSum()" и "getId()"
// - "\n" добавляет новую строку

txt2.text = obj2.getSum(7, 8)+ "\n"+ obj2.getId();

// используем "addChild()" для отображения текста в Flash-приложении
addChild(txt2);

- При вызове методов "getSum()" и "getID()" программа выполняет код функций, связанных с ними (каждая возвращает строку).

- Обратите внимание, что для того, чтобы связать функцию "f_sum()" с методом "getSum()" используется только имя (без круглых скобок), но когда метод вызывается, нужно использовать скобки, а также учитывать параметры связанной функции.

Другим важным аспектом в примере является выражение "this.id". Ключевое слово this часто используется внутри метода и всегда ссылается на текущий объект, через который вызывается метод.

"id" — свойство объекта «obj2″. Таким образом, выражение "this.id" возвращает значение свойства "id" текущего объекта (obj2).

Если добавить код, указанный выше, в новый Flash-документ и запустить приложение (Ctrl+Enter), в окне приложения появятся две строки текста:

The sum is: 15
The ID: tutorials

Изменение свойств и методов

Значение свойств и методов объекта, созданного при помощи класса Object, можно изменить в любое время, применив такой же способ, который использовался для их создания:

- Для свойств

objectName.property_name = new_value;
или
objectName["property_name"] = new_value;

- Для методов

objectName.methodName = another_function;
или
objectName.methodName = function():DataType { ... Другой код };

Вот пример. Мы определяем объект со свойством "gen" и методом "Race()", затем изменяем значение.

// определяем объект "obj3" со свойством "gen" и методом "Race()"
var obj3:Object = new Object();
 obj3.gen = 'Animals';
 obj3.Race = function():String { return "Donkeys" };

// используем trace() чтобы проверить значения
trace(obj3.gen+ ' - '+ obj3.Race());           // Animals - Donkeys

// изменяем значения свойств "gen" и "Race()"
obj3.gen = 'Birds';
obj3.Race = function():String { return "Pigeons" };

// проверяем снова значения свойств
trace(obj3.gen+ ' - '+ obj3.Race());           // Birds - Pigeons

Как видите второе выражение trace() выводит другой результат.

Удаление свойств и методов, проверка их наличия

Чтобы удалить свойство или метод объекта, созданного при помощи класса Object, используйте оператор delete, как в следующем синтаксисе:

delete objectName.element;

-"element" — может быть любое свойство или метод объекта "objectName".

Если вы хотите проверить определено ли свойство или метод в объекте (или экземпляр класса), используйте оператор in, как в синтаксисе:

"element" in Class

-"element" должен быть добавлен в кавычки и может быть любым свойством или методом класса ("Class" — может также быть имя объекта, созданного с использованием класса Object).

Этот оператор возвращает true если "element" находится в "Class", иначе возвращает false.

В следующем примере создается объект (obj4) со свойством «gen» и методом «Race()». Мы используем оператор «in» чтобы проверить их наличие, затем мы удаляем их, и проверяем снова их наличие.

// Определяем объект "obj4"со свойством "gen" и методом "Race"
var obj4:Object = new Object();
 obj4.gen = 'Animals';
 obj4.Race = function():String { return "Donkeys" };

// используем "in" чтобы проверить наличие свойства и метода
trace("gen" in obj4);            // true
if("Race" in obj4) {
  trace(obj4.Race());             // Donkeys
}

// Удаляем "gen" и "Race()"
delete obj4.gen;
delete obj4.Race;

// снова проверяем на наличие свойство и метод
trace("gen" in obj4);            // false
if("Race" in obj4) {
  trace(obj4.Race());
}

// Пытаемся обратиться к свойству и методу объекта
trace(obj4.gen+ ' - '+ obj4.Race());           // TypeError: Error #1006: Race is not a function ...

Обратите внимание на эффект «in» и «delete», и как используется оператор «if».

Скачать FLA-файлы с примерами класса Object в ActionScript 3 вы можете здесь.

Источник: http://coursesweb.net/actionscript/create-objects-as3

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

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

Почта не публикуется.Обязательные поля отмечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>