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

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

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

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

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от riden Посмотреть сообщение
Потому что AS1 это AS1, он ближе к функциональному программиованию.
Ну так вот и не нужно придумывать подобных костылей и не выпендриваться.

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

Я вообще не понимаю, ради писанины в кадрах люди предпочитают так извращаться и контролировать процесс, чтобы не дай бог, что-нибудь рассыпется. Я уже не говорю, что эти приватные методы каждый раз создаются заново и жрут память.

Цитата:
Сообщение от riden Посмотреть сообщение
И this ссылается на объект активации, функции. У каждой функции свой this - это указатель на экземпляр "себя".
Да нет у простых локальных функций this, господи. arguments.callee — вот ссылка на функцию. А this — ссылка на область видимости.


Последний раз редактировалось etc; 29.06.2008 в 22:50.
Старый 29.06.2008, 22:49
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 323  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от riden Посмотреть сообщение
Я опроверг два твоих "требования". А здесь я так и пишу, что pat - ссылка. Тяжело тект воспринимать, да?
нет, не опровергли ни одно.
Ссылка, это когда обращение к ссылке == обращение к самому объекту. То, что вы создали - это копия, а не ссылка =)
т.е. ссылка:
Код:
var a:Object = {prop:0};
var b = a;
b.prop = 1;
trace(b.prop == a.prop);
копия:
Код:
var a:Object = {prop:0};
var b = {};
for (vat i in a){
b[i] = a[i];
}
b.prop = 1;
trace(b.prop == a.prop);
Следовательно, обратится к другому свойству вы не смогли.

Цитата:
Тут выше, правда, тут же начали возмущаться, что это не приватный метод, т.к.:
- он ведет себя не как в AS3
- функция - это не метод
- this ОБЯЗАН указывать на один и тот же объект...
- и собственно вообще, нормально рабочие приватные методы - это как в AS3
Все эти доводы придуманы не мной и не какой-то группой отщепенцев-подрывников мировых устоев. Это общепринятые соглашения среди разработчиков большинства современных языков програмирования. Тут, у вас могут быть свои взгляды, и вы можете решить, что вам удобнее теплое называть холодным, но тогда наш разговор потеряет всякий смысл, потому что вы наотрез отказываетесь пользоваться тем же языком, или по крайней мере переводом...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 29.06.2008 в 22:55.
Старый 29.06.2008, 23:08
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 324  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Да нет у простых локальных функций this, господи. arguments.callee — вот ссылка на функцию. А this — ссылка на область видимости.
Код:
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 ссылается на область видимости. Но функция АС1 != класс AC3.
this - это указатель, который служит для создания свойств в "объекте" - то есть на то что указывает (область видимости): диаграмма, клип или пустой объект. Если объект не создан, то - undefined
__________________
видеоигры - высший вид искусства


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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от riden Посмотреть сообщение
Но функция АС1 != класс AC3.
Я бы даже сказал «функция АС1 != класс», что, собственно, и требовалось доказать. Хотите, конечно, называйте классами, если так удобно.

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

Регистрация: Jun 2005
Сообщений: 147
2 wvxvw:
Хорошо... #316 - это вас устраивает?
А два ваших требования - опровержимы (я это показал). this? Что вы так заморачиваетесь? AS1 - это prototype-based OOP, и это не я придумал. И я здесь не защищаю AS1 или умоляю AS3... я просто за честность.
__________________
видеоигры - высший вид искусства

Старый 29.06.2008, 23:27
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 327  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от __etc Посмотреть сообщение
Кто-то недавно заявлял, что приваты есть и все прекрасно.
Вначале кто-то сказал, что AS1 - это не язык ООП и что там все методы паблик. От этого и пляшем.
Что касается приватов - вы не ответили на мой вопрос, поэтому есть они или нет ОТСЮДА не видно

Цитата:
Сообщение от __etc Посмотреть сообщение
Да нет у простых локальных функций this, господи. arguments.callee — вот ссылка на функцию. А this — ссылка на область видимости.
this - ссылка на объект активации функции (в локальной функции его можно было даже пощупать ФП6)

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Хух... как это все не просто... вы не поняли. по определению любой метод класса должен быть доступен любому другому методу класса, а не только тому, на кого была передана ссылка - вы путаете понятия и в упор не хотите замечать очевидные вещи.
То, что вы привели в качестве примера, это воркараунд (не самый удачный) призваный имитировать работу приватного метода, но не выполняющий возложенные на него функции на 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.
Старый 29.06.2008, 23:50
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 329  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
Цитата:
но не выполняющий возложенные на него функции на 100% потому что по прежнему методы объявленные на прототипе класса вне конструктора не увидят такой "приватный метод"
Вне конструктора AS1 - означает вне тела класса. Вы бы так делали в AS3?
Да в AS3 есть вспомогательные классы и функции которые пишутся в том же пакете - но это не то.
Так с какой стати вы хотите, что-то писать вне тела класса?

Поэтому это приватный метод... на 100%.
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 29.06.2008 в 23:59.
Старый 30.06.2008, 00:05
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 330  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
простите... вы не понимаете, что такое приватный метод... ну я не знаю...
MyClass.prototype.someMethod = function(){} - это легитимный синтаксис? Или вы может будете с этим тоже спорить?

С какой стати? а потому, что все "классы" в АС1 динамические - хочу - пишу, не хочу - не пишу. Кто мне запретит добавлять свойства к динамическому классу?
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.06.2008 в 00:07.
Создать новую тему Ответ Часовой пояс GMT +4, время: 01:55.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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