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 вы можете здесь.

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

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

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

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