![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
Цитата:
__________________
видеоигры - высший вид искусства |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Ну так вот и не нужно придумывать подобных костылей и не выпендриваться.
А вообще, можно и без ссылки обойтись, подложив другой костыль, он мне больше нравится, но все примеры кода, которые тут были приведены на последних четырех-пяти страниц ярко иллюстрируют пример того, как делать не надо. Я вообще не понимаю, ради писанины в кадрах люди предпочитают так извращаться и контролировать процесс, чтобы не дай бог, что-нибудь рассыпется. Я уже не говорю, что эти приватные методы каждый раз создаются заново и жрут память. Да нет у простых локальных функций 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,787
|
Я бы даже сказал «функция АС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, время: 12:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|