Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.06.2008, 19:48
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 291  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от riden Посмотреть сообщение
2 __etc

Код:
//конструктор класса
function Class1(a){
var pvar2:Number;//приватное свойство
this.a = a;//паблик свойство по значению
//приватный метод
function pMet(){
return Math.random()*a;
}
//паблик метод
function pmet1(){
return "Вот так я работаю "+pMet();
}

this.met1=pmet1;//паблик метод, свойство по значению
}

////////////////////////////////////////
var obj = new Class1(2);
trace(obj.met1()); //Вот так я работаю 0.312059603631496
То, что вы написали — использование локальной функции, это вовсе не метод. Поставьте трейc this внутри вашего метода и посмотрите, что он вам вернет.

Код:
//конструктор класса
function Class1(a){
var pvar2:Number;//приватное свойство
this.a = a;//паблик свойство по значению
//приватный метод
function pMet(){
	trace('я есть приватный метод класса '+this); // я есть приватный метод класса undefined
return Math.random()*a;
}
//паблик метод
function pmet1(){
return "Вот так я работаю "+pMet();
}

this.met1=pmet1;//паблик метод, свойство по значению
}

////////////////////////////////////////
var obj = new Class1(2);
trace(obj.met1()); //Вот так я работаю 0.312059603631496

Старый 29.06.2008, 19:52
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 292  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от riden Посмотреть сообщение
2 wvxvw:
Вы трэйсите this не TClass, а toBePrivate. То есть вы хотите узнать видимость "внутри" toBePrivate? this - не для этого служит. Для чего он служит в AS1 я уже писал.
Если область видимости одинаковая у двух объектов - this у этих двух объектов обязан указывать на один и тот же объект - это азы понимания ОО. Вы спорите с аксиомами...
__________________
Hell is the possibility of sanity

Старый 29.06.2008, 19:53
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 293  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Сообщение от __etc
Поставьте трейc this внутри вашего метода и посмотрите, что он вам вернет
Да вы что все сговорились?
Еще раз... процетирую себя:
Цитата:
this - это указатель на объект активации. В вашем случае, такой объект - function toBePrivate. Ну и где вы создаете ее экземпляр? Не создаете?, тогда что вы хотите получить от this?
function toBePrivate замените на function pMet
__________________
видеоигры - высший вид искусства

Старый 29.06.2008, 19:57
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 294  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от riden Посмотреть сообщение
Да вы что все сговорились?
Еще раз... процетирую себя:

function toBePrivate замените на function pMet
Да что вы говорите? А в AS3 трейс this в приватном методе на кого ссылку выдает? Правильно, на экземпляр этого класса. А у вас вообще метод в анонимной области вызывается и совсем не принадлежит экземпляру. Т.е. опять же, это не приватный метод, а локальная функция, коей и была всю дорогу.

Если уж вы так не соглашаетесь относительно this, то расскажите (точнее, покажите) мне, каким образом я могу работать с публичными переменными данного класса внутри приватного метода pMet?

Старый 29.06.2008, 20:01
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 295  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Если область видимости одинаковая у двух объектов - this у этих двух объектов обязан указывать на один и тот же объект - это азы понимания ОО. Вы спорите с аксиомами...
Азы? Где же вы такое прочитали?
АС3 я знаю, не надо мне про "Азы" говорить.
Что бы обратится к приватному свойству/методу в AS1 мне достаточно обратится к локальной переменной/функции.
В AS1 совершенно другое значение функции, более широкое. У каждой функции свой this. Так что, что вы мне свою пургу несете про "азы". Вы будите мне доказывать, что прототипное ООП - вовсе не ООП?
AS1 очень гибок это факт. А AS3 очень эффективен.
__________________
видеоигры - высший вид искусства

Старый 29.06.2008, 20:06
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 296  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
2 __etc
Цитата:
Если уж вы так не соглашаетесь относительно this, то расскажите (точнее, покажите) мне, каким образом я могу работать с публичными переменными данного класса внутри приватного метода pMet?
Хватит меня напрегать, если не знаете, полно литературы по АС1

Как?
Код:
var pa;
this.a = 34;
pa = this.a;
function pMet(){
trace(a); // первый способ
trace(pa); // второй способ
}
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 29.06.2008 в 20:08.
Старый 29.06.2008, 20:18
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 297  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от riden Посмотреть сообщение
Хватит меня напрегать, если не знаете, полно литературы по АС1
А, я уже вас напрягаю? Т. е. все-таки что-то не так?
Давайте расставим все точки над i, не уходите от разговора:

Цитата:
Сообщение от riden Посмотреть сообщение
Как?
Код:
var pa;
this.a = 34;
pa = this.a;
function pMet(){
trace(a); // первый способ
trace(pa); // второй способ
}
Ага, как мне изменить значение публичной переменной «a» в приватном методе pMet? Мне же не просто надо смотреть на переменную, а ещё и изменять её.

Старый 29.06.2008, 20:34
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 298  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Да вы что все сговорились?
Вот именно все сговорились и решили называть функцию с той же областью видимости, что и объект, в котором она была создана, методом. А вы как-то пропустили этот момент =)
Т.е. посмотрите на это так:
существует класс Функция, он может быть использован, как метод другого класса, но не обязан. Метод обязан быть функцией. Из этого следует, что не все функции - методы, но все методы - функции.
То что вы создали не является методом, потому что не соответствует определению метода, но является функцией. Чтобы эта функция была методом она должна соответствовать следующим условиям:
- она должна быть доступна любому другому методу объекта, чьим методом она является. (Ваша функция этому требованию не соответствует, т.как методы объявленные на прототипе класса не смогут к ней обратиться).
- она должна быть в состоянии обратиться к любому другому методу класса, чьим методом она является. (Ваша функция не соответствует этому требованию, т.как любой метод / свойство объявленное после ее оъявления будут ей недоступны).
__________________
Hell is the possibility of sanity

Старый 29.06.2008, 20:41
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 299  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Вот именно все сговорились и решили называть функцию с той же областью видимости, что и объект, в котором она была создана, методом. А вы как-то пропустили этот момент =)
Т.е. посмотрите на это так:
существует класс Функция, он может быть использован, как метод другого класса, но не обязан. Метод обязан быть функцией. Из этого следует, что не все функции - методы, но все методы - функции.
То что вы создали не является методом, потому что не соответствует определению метода, но является функцией. Чтобы эта функция была методом она должна соответствовать следующим условиям:
- она должна быть доступна любому другому методу объекта, чьим методом она является. (Ваша функция этому требованию не соответствует, т.как методы объявленные на прототипе класса не смогут к ней обратиться).
- она должна быть в состоянии обратиться к любому другому методу класса, чьим методом она является. (Ваша функция не соответствует этому требованию, т.как любой метод / свойство объявленное после ее оъявления будут ей недоступны).
Я бы ещё добавил, что все методы должны объекта иметь ту же область видимости, что и сам объект.

Старый 29.06.2008, 20:52
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 300  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Сообщение от wvxvw
Чтобы эта функция была методом она должна соответствовать следующим условиям:
- она должна быть доступна любому другому методу объекта, чьим методом она является. (Ваша функция этому требованию не соответствует, т.как методы объявленные на прототипе класса не смогут к ней обратиться).
- она должна быть в состоянии обратиться к любому другому методу класса, чьим методом она является. (Ваша функция не соответствует этому требованию, т.как любой метод / свойство объявленное после ее оъявления будут ей недоступны).
Код:
function Class1(){
var pat;
this.at=34;
pat = this.at;
//приватный метод
function pMetA(){
trace(pat); // использует паблик свойство по ссылке
}
//приватный метод
function pMetB(){
pmet2; //использует паблик метод объявленный "после", требование 2 исчерпано
}
//паблик методы
function pmet1(){
pMetA();
}
function pmet2(){
trace("do pmet2");
}

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

////////////////////////////////////////
var obj = new Class1();
obj.met2(); //do pmet2
obj.met3(); //34
Добавлено в 18:59
2 __etc:
Цитата:
Ага, как мне изменить значение публичной переменной «a» в приватном методе pMet? Мне же не просто надо смотреть на переменную, а ещё и изменять её.
Используй prototype. Вы не программировали на AS1?
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 29.06.2008 в 20:59.
Создать новую тему Ответ Часовой пояс GMT +4, время: 11:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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