|
|
|||||
[+3 17.04.11]
Регистрация: Mar 2011
Сообщений: 168
|
Set - Get - методы
Здравствуйте. Проблема с сеттером.
Проблема №1. где-то вызываю: Set - метод не вызывается, т.к. вроде метод push добавляет новый элемент и возвращает новую длину массива. Проблема №2. где-то вызываю: Set - метод снова не срабатывает, т.к. сам мувиклип не изменяется. |
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Вы перепутали set и get. Не нужно ничего делать методом тыка, читайте: http://help.adobe.com/ru_RU/ActionSc...8a9b90204-7fcb
|
|
|||||
[+3 17.04.11]
Регистрация: Mar 2011
Сообщений: 168
|
КАК ПЕРЕПУТАЛ? Справку я читал, и Мука читал ))) Сеттер вызывается при изменении свойства, т.е. когда ему присваивается новое значение, геттер когда нужно получить его значение. Как тут можно перепутать? Объясните пожалуйста.
|
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Как вам объяснить, если вы читать не умеете?
|
|
|||||
[+3 17.04.11]
Регистрация: Mar 2011
Сообщений: 168
|
Bgg - чем мой код отличается от вашего???
gloomyBrain прав, сам мувик не изменяется, поэтому сеттер не срабатывает. Как мне выйти из этого положения, не буду ж я делать сеттер отдельно на каждый метод мувиклипа, как организовать событие о том что что-то в мувике изменилось? |
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
.....
|
|
|||||
Modus ponens
|
AS3, в отличие от других разновидностей ECMAScript, язык со статической типизацией, это значит, что если вы не указываете тип переменной, то для того, чтобы как-то сохранить соответствие с ECMA-стандартом, переменная объявляется со специальным типом, который заставит рантайм определять ее тип по ходу выполнения, а еще иногда и приводить к тому типу, который ему покажется подходящим в том или ином случае. Это нормальная практика в языках типа JavaScript / Lua и им подобных, где скорость не важна, и код, как правило состоит из одного-двух файлов. В AS3 типичный проект гораздо больше, чем типичный проект на JavaScript, кроме того, AS3 все-таки можно иногда использовать для более сложных рассчетов, поэтому не указывать тип переменных в AS3 - это очень плохая практика (т.как это одновременно ухудшает производительность равно как и контроль за тем, что происходит в проекте). Ни одна компания более-менее серьезно разрабатывающая на AS3 не будет использовать динамическую типизацию в своем коде.
Подчерки и знак доллара зарезервированы для использования в коде сгенерированным компилятором, поэтому, за очень редким исключением, от их использования лучше отказаться. Нормально использовать подчерки в названиях констант, приватных свойств, пространств имен и названиях слушателей событий, если вы хотите, чтобы они были похожи на названия которые генерирует компилятор. Но даже в этих случаях лучше найти вариант, где подчерки не нужны. Что до вашего вопроса, то ОО, а именно объекты, в AS3 реализованы таким образом, что методы специализирующиеся на определенном типе объекта бывают двух видов, статические и привязаные к объекту, последние: - объявляются "внутри" объявления класса этого объекта. - автоматически получают переменную this со ссылкой на объект класса, на котором они специализируются. В то время как статические являются по сути функциями помещенными в пространсвто имен объекта, на которм специализируются, но в полном смысле этого слова методами не являются. Специальные функции get и set нужны для описания свойств объекта (они, так же как методы, могут быть статическими и привязанными к объекту). Статические специализируются не переменных в пространстве имен объекта на котором специализируются, привязанные - на переменных экземпляра класса на котором специализируются. Последние, так же как и методы, получают переменную this указывающую на объект, на котором они специализируются. Это значит, что внутри сеттера или геттера вы можете обратится к другим полям объекта или его пространства имен. Геттер соответственно вызывается когда вы читаете из свойства с названием геттера, а сеттер при записи в это свойство. Например свойство массива length могло бы быть реализовано следующим образом: public class Array { private var _length:uint; AS3 function get length():uint { return this._length; } AS3 function set length(value:uint):void { var add:uint; if (this._lenght != value) { if (this._length > value) { this.splice(this._length - value, -1 * (value - this._length)); } else { add = value - this._length; while (add--) this.push(undefined); } } this._length = value; } }
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 02.06.2011 в 01:50. |
|
|||||
Modus ponens
|
Ну, это уже издержки производства (splice() тоже меняет) Кроме того, функция по-настоящему реализована не так, код только для наглядности, чтобы было видно, что свойсто поменялось, не реализовывать же весь функционал массива ради одного свойства .
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 12:26. |
|
« Предыдущая тема | Следующая тема » |
Теги |
get-метод , set-метод |
|
|