Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Флейм (http://www.flasher.ru/forum/forumdisplay.php?f=53)
-   -   Битва гигантов: AVM1 vs. AVM2. Спешите видеть! Только у нас! (http://www.flasher.ru/forum/showthread.php?t=113128)

etc 29.06.2008 21:23

Цитата:

Сообщение от riden (Сообщение 748702)
2 etc потому что там куча лишнего кода, уберите лишний трейс. Метод met1 вызывается два раза. Этот код на все случаи жизни, на требования которыми в меня напрягли сегодня.

Чтобы больше не напрягаться, просто скажите, что вы не знаете, как сделать псевдо-приватность на AS1 и все тихо разойдутся.

Прототип ваш не поможет, ибо экземпляров Class1 может быть больше одного.

riden 29.06.2008 21:25

Какие еще вопросы? Видимость есть, обращение есть, наследование есть... что еще надо то?

etc 29.06.2008 21:27

Цитата:

Сообщение от riden (Сообщение 748704)
Какие еще вопросы? Видимость есть, обращение есть, наследование есть... что еще надо то?

Приватные методы хочу. Покажите и чтобы ещё работали нормально. Или честно скажите, что не знаете.

riden 29.06.2008 21:38

2 __etc
Код:

function Class1(){
// приват метод
function pMetA(){
pmet2; //использует паблик метод объявленный "после", требование 2 wxvxw исчерпано
}
function pMetB(){
Class1.prototype.propFor__etc = "not more __etc"; // приватный метод изменяет паблик свойство
}
//паблик методы
function pmet1(){
pMetA();
}
function pmet2(){
trace("do pmet2");
}
function pmet3(){
pMetB();
}

this.met1=pmet1;//паблик метод, свойство по значению
this.met2=pmet2; //паблик метод объявленный после
Class1.prototype.met3 = pmet3; // требование 1 wxvxw исчерпано, метод в прототипе
Class1.prototype.propFor__etc="for_etc"; // паблик свойство по ссылке, наследуется подклассами
}

////////////////////////////////////////
var obj = new Class1();
//obj.met2();//do pmet2
//obj.met3();
trace(obj.propFor__etc);//for_etc
obj.met3();
trace(obj.propFor__etc);//not more __etc


etc 29.06.2008 21:41

Цитата:

Сообщение от riden (Сообщение 748707)
2 __etc
Код:

function Class1(){
// приват метод
function pMetA(){
pmet2; //использует паблик метод объявленный "после", требование 2 wxvxw исчерпано
}
function pMetB(){
Class1.prototype.propFor__etc = "not more __etc"; // приватный метод изменяет паблик свойство
}
//паблик методы
function pmet1(){
pMetA();
}
function pmet2(){
trace("do pmet2");
}
function pmet3(){
pMetB();
}

this.met1=pmet1;//паблик метод, свойство по значению
this.met2=pmet2; //паблик метод объявленный после
Class1.prototype.met3 = pmet3; // требование 1 wxvxw исчерпано, метод в прототипе
Class1.prototype.propFor__etc="for_etc"; // паблик свойство по ссылке, наследуется подклассами
}

////////////////////////////////////////
var obj = new Class1();
//obj.met2();//do pmet2
//obj.met3();
trace(obj.propFor__etc);//for_etc
obj.met3();
trace(obj.propFor__etc);//not more __etc


Ну да :)
Шах:

Код:

//конструктор класса
function Class1() {
        // приват метод
        function pMetA() {
                pmet2;//использует паблик метод объявленный "после", требование 2 wxvxw исчерпано
        }
        function pMetB() {
                Class1.prototype.propFor__etc = "not more __etc";// приватный метод изменяет паблик свойство
        }
        //паблик методы
        function pmet1() {
                pMetA();
        }
        function pmet2() {
                trace("do pmet2");
        }
        function pmet3() {
                pMetB();
        }

        this.met1 = pmet1;//паблик метод, свойство по значению
        this.met2 = pmet2;//паблик метод объявленный после
        Class1.prototype.met3 = pmet3;// требование 1 wxvxw исчерпано, метод в прототипе
        Class1.prototype.propFor__etc = "for_etc";// паблик свойство по ссылке, наследуется подклассами
}

////////////////////////////////////////
var obj = new Class1();
//obj.met2();//do pmet2
//obj.met3();
trace(obj.propFor__etc);//for_etc
obj.met3();
trace(obj.propFor__etc);//not more __etc
o = new Class1();
trace(o.propFor__etc); // for_etc, ok
trace(obj.propFor__etc); // for_etc, WTF?? Что-то не так ;)

:quiet:

riden 29.06.2008 22:18

А так прокатит?
Код:

function Class1(){
// приват метод
var pa = this;//ссылка
this.a = 4;
//приват метод изменяте паблик свойство
function pMetA(){
pa.a=10;
}
function pMetB(){
Class1.prototype.propFor__etc = "not more __etc"; // приватный метод изменяет паблик свойство
}
//паблик методы
function pmet1(){
pMetA();
}
function pmet2(){
trace("do pmet2");
}
function pmet3(){
pMetB();
}
this.met1=pmet1;//паблик метод, свойство по значению
this.met2=pmet2; //паблик метод объявленный после
this.met3=pmet3;
Class1.prototype.met4 = pmet1; // требование 1 wxvxw исчерпано, метод в прототипе
Class1.prototype.propFor__etc="for__etc"; // паблик свойство по ссылке, наследуется подклассами
}

////////////////////////////////////////
var obj = new Class1();
var obj1 = new Class1();

trace(obj.a);//4
obj.met1();
trace(obj.a);//10
trace(obj1.a);//4
obj1.met1();
trace(obj1.a);//10


chingachgoog 29.06.2008 22:25

Цитата:

Сообщение от BlooDHounD (Сообщение 748565)
chingachgoog, О! великий АС1-гуру поведуйте мне, как сделать метод приватным.

BlooDHounD, вы крайне невнимательны. Я сказал, что считать, что все методы в AS - паблики - это не верно. Но я не говорил, что научу ваc делать приватные методы на AS1.
Однако. Есть простой способ, сделать метод недоступным ниоткуда, кроме как из своего класса (экземпляра класса).
Тут выше, правда, тут же начали возмущаться, что это не приватный метод, т.к.:
- он ведет себя не как в AS3
- функция - это не метод :)
- this ОБЯЗАН указывать на один и тот же объект...
- и собственно вообще, нормально рабочие приватные методы - это как в AS3

Меня такой разговор удивляет. Есть способ сделать метод доступным только из данного класса. Есть или нет? Есть.
Вы можете такой метод назвать хоть валенком - кто против? Разве изменит это тот факт (который так неохото признать некоторым), что AS1 - это язык ООП? Не изменит. Гурский вообще прямо пишет, что объявление функции внутри другой функции - один из ходов ООП.

__etc пишет, что хочет "нормально работающих приватных методов". Позвольте спросить, в чем их "нормальность"? И самое главное - для КАКОЙ ЦЕЛИ их сделали приватными? Последнее важно. Ведь если мы достигнем цели, значит метод (пусть с презрением трижды обозванный "псевдо") существует и эффективен.

etc 29.06.2008 22:26

Не прокатит, pa — ссылка на самого себя, зачем вам ещё одна? И функции методами от этого не стали.

Цитата:

Сообщение от chingachgoog (Сообщение 748725)
__etc пишет, что хочет "нормально работающих приватных методов". Позвольте спросить, в чем их "нормальность"? И самое главное - для КАКОЙ ЦЕЛИ их сделали приватными? Последнее важно. Ведь если мы достигнем цели, значит метод (пусть с презрением трижды обозванный "псевдо") существует и эффективен.

Кто-то недавно заявлял, что приваты есть и все прекрасно. Но что-то пока не очень прекрасно. Сказали, что есть классы, сказали, что есть и приваты. Ну и я вижу пока потуги уже на третьей или четвертой странице подряд в реализации оных.

riden 29.06.2008 22:32

Цитата:

Не прокатит, pa — ссылка на самого себя, зачем вам ещё одна? И функции методами от этого не стали.
Как зачем, что бы иметь доступ к классу, к объекту активации. Я же говорил, что у каждой функции в AS1 свой this, функция имеет тут более широкое значение. Поэтому использование ссылки - вполне уместно.

Цитата:

И функции методами от этого не стали
Однако работает. И мы имеем приватные и паблик свойства (методы).

etc 29.06.2008 22:37

Цитата:

Сообщение от riden (Сообщение 748728)
Я же говорил, что у каждой функции в AS1 свой this, функция имеет тут более широкое значение. Поэтому использование ссылки - вполне уместно.

Вполне неуместно, это ж надо такое придумать, ссылку на самого себя? Зачем, если есть this? Про «свой this» бросьте, вы просто так и не сделали из функций методы.

Цитата:

Сообщение от riden (Сообщение 748728)
Однако работает. И мы имеем приватные и паблик свойства (методы).

Угу. И разные способы доступа к этим приватам, причем надо постоянно в голове держать, где можно использовать this, а где нельзя.


Часовой пояс GMT +4, время: 03:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.