|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
Цитата:
__________________
видеоигры - высший вид искусства |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Ну так вот и не нужно придумывать подобных костылей и не выпендриваться.
А вообще, можно и без ссылки обойтись, подложив другой костыль, он мне больше нравится, но все примеры кода, которые тут были приведены на последних четырех-пяти страниц ярко иллюстрируют пример того, как делать не надо. Я вообще не понимаю, ради писанины в кадрах люди предпочитают так извращаться и контролировать процесс, чтобы не дай бог, что-нибудь рассыпется. Я уже не говорю, что эти приватные методы каждый раз создаются заново и жрут память. Да нет у простых локальных функций this, господи. arguments.callee — вот ссылка на функцию. А this — ссылка на область видимости. Последний раз редактировалось etc; 29.06.2008 в 22:50. |
|
|||||
Modus ponens
|
Цитата:
Ссылка, это когда обращение к ссылке == обращение к самому объекту. То, что вы создали - это копия, а не ссылка =) т.е. ссылка: копия: var a:Object = {prop:0}; var b = {}; for (vat i in a){ b[i] = a[i]; } b.prop = 1; trace(b.prop == a.prop); Цитата:
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 29.06.2008 в 22:55. |
|
|||||
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
function Class1(){ this.a=1; trace (this); //[object Object] function localFunc(){ this.b=2 trace(this);//this получает ссылку в момент создания экземпляра //Выводит [type Object] trace(this.a); //undefined trace(this.b); //2 } localFunc(); //this.met = localFunc; } //Class1(); var c = new Class1(); //c.met(); /*Выводит: [object Object] - ссылка на объект с [type Object] - ссылка на localFunc() (я так думаю) undefined - нет такого свойства в объекте 2 */ this - это указатель, который служит для создания свойств в "объекте" - то есть на то что указывает (область видимости): диаграмма, клип или пустой объект. Если объект не создан, то - undefined
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 29.06.2008 в 23:46. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Я бы даже сказал «функция АС1 != класс», что, собственно, и требовалось доказать. Хотите, конечно, называйте классами, если так удобно.
|
|
|||||
Регистрация: Jun 2005
Сообщений: 147
|
2 wvxvw:
Хорошо... #316 - это вас устраивает? А два ваших требования - опровержимы (я это показал). this? Что вы так заморачиваетесь? AS1 - это prototype-based OOP, и это не я придумал. И я здесь не защищаю AS1 или умоляю AS3... я просто за честность.
__________________
видеоигры - высший вид искусства |
|
|||||
Banned
[+4 01.02.09]
[+1 01.02.09] |
Вначале кто-то сказал, что AS1 - это не язык ООП и что там все методы паблик. От этого и пляшем.
Что касается приватов - вы не ответили на мой вопрос, поэтому есть они или нет ОТСЮДА не видно this - ссылка на объект активации функции (в локальной функции его можно было даже пощупать ФП6) |
|
|||||
Modus ponens
|
Хух... как это все не просто... вы не поняли. по определению любой метод класса должен быть доступен любому другому методу класса, а не только тому, на кого была передана ссылка - вы путаете понятия и в упор не хотите замечать очевидные вещи.
То, что вы привели в качестве примера, это воркараунд (не самый удачный) призваный имитировать работу приватного метода, но не выполняющий возложенные на него функции на 100% потому что по прежнему методы объявленные на прототипе класса вне конструктора не увидят такой "приватный метод". Куда более логичным было бы просто выдавать ошибку при попытке обращения из-за пределов класса... function TClass () { this.privateMethod = function() { var flag = true; for (var i in this) { if (this[i] == arguments.caller) { flag = false; break; } } if (flag) throw new Error ("Method is private"); trace("Private method accessed!"); } this.publicMethod = function() { this.privateMethod(); } this.toString = function() { return "[TClass]"; } } var t = new TClass(); t.publicMethod(); t.privateMethod(); уловка... Да, у этого "псевдо приватного метода" есть 1 серьезный недостаток, который я не представляю себе как можно исправить - его можно удалить и переписать заново =)
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 30.06.2008 в 00:48. |
|
|||||
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
Да в AS3 есть вспомогательные классы и функции которые пишутся в том же пакете - но это не то. Так с какой стати вы хотите, что-то писать вне тела класса? Поэтому это приватный метод... на 100%.
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 29.06.2008 в 23:59. |
|
|||||
Modus ponens
|
простите... вы не понимаете, что такое приватный метод... ну я не знаю...
MyClass.prototype.someMethod = function(){} - это легитимный синтаксис? Или вы может будете с этим тоже спорить? С какой стати? а потому, что все "классы" в АС1 динамические - хочу - пишу, не хочу - не пишу. Кто мне запретит добавлять свойства к динамическому классу?
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 30.06.2008 в 00:07. |
Часовой пояс GMT +4, время: 17:23. |
|
« Предыдущая тема | Следующая тема » |
|
|