До сих пір у всіх наших прикладах властивості класів брали найпростіші значення, такі як "rover" або 5. Ім'я класу (Dog, наприклад) призначалося їм властивості і прототип ставав властивістю цього класу (Dog.prototype в нашому випадку). В ActionScript ми фактично можемо призначити що-небудь властивості. Це відрізняє ActionScript від багатьох інших мов (Java, наприклад), так що ми опиняємося перед необхідністю роз'яснити, що маємо на увазі під "властивістю". У Java і С ++ існує велика різниця між методами і властивостями, чого немає в ActionScript-е. Так що ж таке методи?
Метод дуже схожий на той, що ми зазвичай розуміємо під функцією в програмі, з однією відмінністю, методи завжди прив'язані до класу і, як правило, викликаються з об'єкта-продажу цього класу. Методи покликані модифікувати стан цього об'єкта та / або повертати обчислені значення. Вони не використовуються для створення нового екземпляра класу. Методи ніколи не використовують свої прототипи, вони не поміщають властивості в власний простір імен (namespace). Методи не схожі на класи. Це просто програми, що належать класу.
Можна сказати, вони "виглядають" як класи. Вони теж створені за допомогою функції, однак вони не викликаються за допомогою оператора new. Їх ключове слово this посилається на об'єкт, який викликав цей метод, аж ніяк не на створений новий. Оскільки вони, подібно класам, автоматично не повертають новий об'єкт, вони можуть повертати якесь значення, навіть якщо воно порожнє (void) (хоча це не вимога, це просто хороший стиль програмування в більш строгих мовами). І останнє, методам, як і іншим властивостям класів, для їх відмінності від цих самих класів, найкраще давати імена, що починаються з великої літери. Тепер давайте подивимося маленький прімерчік того, як створюються і викликаються методи, і потім розберемося у всіх цих термінах, зміст яких, можливо, потихеньку почав від вас вислизати.
А чи помітили ви, що ми завжди визначаємо прототипи до того, як створимо екземпляр класу? Flash не може викликати методи, які ще не визначені, оскільки він зчитує і виконує код в тому порядку, як він написаний (це все тому, що при завантаженні swf файлу ви ніколи не можете бути впевнені в тому, завантажився чи певний шматок коду). Подивившись на конструктор класу в прикладі, ви можете помітити протиріччя вищесказаного. Метод calcDogYears викликається з конструктора до того, як він буде описаний в прототипі. Однак конструктор запуститься лише в той момент, коли буде створено об'єкт "yeller". Коли ви пишете код, ви повинні розглядати клас і його прототип як єдиний блок і визначати їх разом. Методи прототипу зазвичай визначаються після його властивостей.
Хоча методи і можна помістити в екземпляр класу, таке відбувається рідко. Методи за своєю природою більш статичні, ніж рядки або числа, так що вони найімовірніше залишаться окремим великим класом. Буде, можливо, ситуація, коли ви захочете встановити методи під час виконання, передаючи їх як аргумент конструктору. Це той випадок, коли ви раз і назавжди відмовитеся від цього, остаточно заплутавшись у численних операторах if-else. Незабаром ми це роз'яснимо.
Функція, або Клас, або Конструктор, або Метод, або Властивість. Уффф!
Ну ладно, вийде що з цього, чи немає, спробуємо роз'яснити всі ці терміни. В ActionScript-е майже всі вони трошки властивості і трошки об'єкти. Це - велика річ, це важливо розуміти, коли потрібно щось не просто описати, ніж це щось буде фізично, а й визначити поведінку цього чогось, що воно повинно буде робити. Намотавши все це собі на вус, почнемо потихеньку з класів, методів і функцій.
- Клас (Class) - це визначення або шаблон, необхідний для створення нового об'єкта. Ключове слово: new. Сюди входить і визначення прототипу класу. При цьому не повертається ніякого значення, тому що повертається новий створений об'єкт. Кожен раз, використовуючи оператор new. ви створюєте новий екземпляр класу. Ключове слово this посилається на новий створений екземпляр. Аргументи при цьому використовуються для того, щоб наділити кожний об'єкт певними властивостями.
- Метод (Method) - це програма, в більшості випадків визначається в прототипі класу і завжди запускається за допомогою об'єкта (найчастіше екземпляром класу, який має прямий доступ до методу). Метод може використовувати аргументи і повертати певні значення. Ключове слово this посилається на об'єкт, що викликає метод. Хоча у методів є прототипи і простір назв, вони ігноруються.
- Функція (Function) - ви можете задатися питанням, як сюди "вписуються" звичайні функції, які не створюють нових об'єктів і не належать класам? Що ж, ніяк. Якщо ви збираєтеся щільно зайнятися ООП, ви повинні добре це засвоїти. Функції, що існують самі по собі, - жителі іншого світу, званого процедурним програмуванням (ах да, вони теж вельми корисні і круті, але тільки не в світі ООП).
- Конструктор (Constructor) - відноситься до класу, який створює / створював об'єкт. Ім'я його збігається з ім'ям класу, представляє з себе блок коду, необхідний для ініціалізації об'єктів класу.
- Властивості (Properties) - технічно це щось, присвоєне об'єкту, що стало властивістю цього об'єкта. Це щось може бути рядком, числом і т.д. а також методом і іншим об'єктом. Під властивостями часто мають на увазі все "неметоди", так що будьте готові до цього. ActionScript не робить різниці між методами і властивостями, але вам часом це буде необхідно. Властивості іноді називають атрибутами (тільки дані), змінними (тільки дані), членами класу (дані і методи), парними полями (дані і методи), хоча вони завжди будуть нести в собі проблему подвійного значення з того моменту, коли ви почнете користуватися цими термінами. На щастя, в 99 випадків з 100 про дійсний сенс ви можете здогадатися з контексту. Що залишився 1% - всього лише властивість ActionScript-a. Резюмуючи, вони можуть означати все неметоди, або методи і неметоди, все залежить від контексту.
- Члени класу (Members) - теж заслуговують на увагу, оскільки це загальна назва для властивостей і методів об'єкта. В даному випадку клас або об'єкт можна розглядати як набір певних речей і речі ці суть члени цього набору.
- Об'єкти або екземпляри класу (Object vs Instance) - це взагалі-то синоніми, хоча екземпляром зазвичай називають об'єкт, створений за допомогою оператора new. в той час як об'єкт - загальна назва для всіх об'єктів. Рядки і числа безсумнівно є об'єктами, фактично ж це екземпляри, створені внутрішніми конструкторами ActionScript-а. Зазвичай екземпляр явно не вказує на тип об'єкту, але ви завжди зможете здогадатися з контексту.