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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.06.2008, 17:14
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 371  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> wvxvw, придираетесь к терминологии. "при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль." пример плз.
Код:
function TClass (targetObj) {
	function notMethod () {
		trace (this);
	}
	notMethod.call(targetObj);
}
function AClass () {
	this.toString = function () {
		return ("[AClass]");
	}
}
var t = new TClass(new AClass()); //[AClass]
Вот, такого поведения у метода не должно быть.

ЗЫ. Терминология, особенно в том, что касается точных наук нужна для того, чтобы ей неукоснительно следовать. Иначе возникают разночтения, которые только препядствуют дальнейшему развитию. Для этого пишутся стандарты, создаются исследовательские группы...
При этом примеры таких разночтений призваных к жизни исключительно ленью и халатностью разработчиков не удосужившихся заглянуть в госты/стандарты и т.п. литературу - сплошь и рядом. Да тот же ХТМЛ, который никогда ни в одной програме способной его воспринимать не был реализован согласно своим стандартам.
Поэтому, лучше называть вещи своими именами - пусть лучше будет сложнее понять, но правильно, чем неверно истолковано.
Что касается нашего спора: я могу согласится называть локальную функцию методом, но я всего 1 человек имеющий мало веса в огромнейшем программерском сообществе. В этом же сообществе существует масса литературы трактующей метод по-другому. Локально приняв соглашение об использовании ненормативной терминологии мы создадим прецедент, последствиями которого может стать кривая реализация другого абсолютно не связанного с нашим спором проэкта. Что в дальнейшем повлечет за собой лишние усложнения в технологии работающей с ним и т.д...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.06.2008 в 17:34.
Старый 30.06.2008, 17:15
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 372  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
AS2 - ООП?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от iNils Посмотреть сообщение
AS2 - ООП?
AS2 как языка не существует. AS2 — ООП-маска.

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

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Сообщение от __etc
riden просто до сих пор не знает, как использовать call и apply, поэтому начинает нести пургу относительно this, то рассказывая про то, что он суть arguments.caller, то соглашался, что это ссылка на область видимости, теперь опять arguments.caller.
Никогда такого не говорил. Объект активации, область видимости... называйте как угодно... this - это указатель на объект активации функции, я уже приводил код. Если вы не понимаете сути 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
*/
Цитата:
Чего и следовало ожидать, как и riden-а, вывалился стандартный костыль в виде ссылки на самого себя и функция так и осталась локальной функцией и не работает, как метод.
Мы кажется говорим про приватный метод. Что за бред: "функция не работает как метод"? Приватный метод - тоже что и локальная функция.
А если хотитие чтобы функция работала как метод, то надо сделать вот так: this.свойство = функция.

Цитата:
Сообщение от wvxvw
Это не значит, что при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль. Просто существуют такие обстоятельства, когда они это делать не могут.
Нет таких обстоятельств, всегда можно вызвать локальную функцию в теле родного класса.

Еще раз, почему функция в AS1 - это и конструктор и тело класса...
Во первых, потому что:
Цитата:
Сообщение от riden
Функция в AS1, которая имеет объект активации в виде объекта инициализированного оператором new, и есть класс, так как с этого момента (new) this данной функции будет ссылатся на объект активации, на каждый экземпляр и заполнять пустой объект свойствами this."свойство".
Во вторых: Так как все что находится в теле функции-класса, реально копируется при создании экземпляра, а вот все что снаружи - всего лишь получает ссылку. Убедится в этом очень просто:
Код:
function func1(){}; // Создаем внешнюю функцию
func1.prop2=1; // Присваиваем функции свойство
function Class1(){ // Функция-класс
     function func2(){}; // Создаем внутреннюю функцию
     func2.prop=1; // Присваиваем внутренней функции свойство
     this.method1=func1; // Создаем методы, ссылаясь на внутреннюю
     this.method2=func2; // и внешнюю функции
	 
}
var obj1=new Class1(); // Создаем два объекта класса Class
var obj2=new Class1();
obj1.method1.prop=2; // Переопределяем свойства функций методов
// одного из объектов
//obj1.method2.prop=2;
trace(obj2.method1.prop); // Выводит: 2 (свойство было изменено)
trace(obj2.method2.prop); // Выводит: 1 (свойство осталось неизменным)
2 __etc (#370): мы говорим сейчас про реализацию приват и паблик, не отступайте от темы... или признайте, что вы не правы.
__________________
видеоигры - высший вид искусства


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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Это не значит, что при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль. Просто существуют такие обстоятельства, когда они это делать не могут.

Нет таких обстоятельств, всегда можно вызвать локальную функцию в теле родного класса.
А метод можно вызвать вне тела класса - в этом разница
__________________
Hell is the possibility of sanity

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от riden Посмотреть сообщение
Никогда такого не говорил. Объект активации, область видимости... называйте как угодно... this - это указатель на объект активации функции, я уже приводил код. Если вы не понимаете сути this, и кокое он имеет отношение к функции, ваши проблемы. Я уже приводил код... тогда еще раз...
Объект активации, область видимости, ссылка на функцию — разные вещи, совершенно. arguments.caller, this, arguments.callee соответственно.

Цитата:
Сообщение от riden Посмотреть сообщение
[type Object] - ссылка на localFunc() (я так думаю)
Как была областью видимости, так ею и осталась. Одно дело думать, другое дело — знать. Вы создали свойство в анонимной области видимости, после этого приплетаете объект активации (arguments.caller, вы знаете, что это такое?), который вообще отношения к ней не имеет.



Цитата:
Сообщение от riden Посмотреть сообщение
Приватный метод - тоже что и локальная функция.
Неправда. Локальная функция не принадлежит объекту, она сама может быть как объект. Приватный метод обязан принадлежать классу, который его реализует, а значит область видимости (this внутри этого метода) должен указывать на экземпляр этого класса. У вас этого не происходит и вы вынуждены создавать ссылки на экземпляр (т.е. ссылка на самого себя), чтобы иметь возможность работать с другими методами и свойствами экземляра. Но то, что у вас есть внешняя ссылка (а не внутренняя) на экземпляр, не делает эту функцию методом, принадлежащем экземпляру. Вам об этом талдычат уже пятую или шестую страницу подряд, но вы упорно этого не понимаете, начиная нести чушь про this и объекты активации, которые вообще отношения к делу не имеют.

Цитата:
Сообщение от riden Посмотреть сообщение
2 __etc (#370): мы говорим сейчас про реализацию приват и паблик, не отступайте от темы... или признайте, что вы не правы.
В чем я не прав? Вы до сих пор не организовали ваши чудо-приваты так, как следовало, хотя я и wxvxw несколько раз давали намек на реализацию. Т.к. я понял, что мне этого от вас не добиться и ваши приватные методы никогда не будут работать в области видимости экземпляра (уж это реализовать можно, хоть методы так и не будут принадлежать экземпляру, т.к. это невозможно из-за подобной «приватности»), я решил продолжить тему относительно того, является ли AS1 истинным объектно-ориентированным языком или нет. И прошу товарища индейца переписать мои классы на AS1, с учетом обязательной реализации приватности.

Старый 30.06.2008, 18:24
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 377  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от riden Посмотреть сообщение
Во вторых: Так как все что находится в теле функции-класса, реально копируется при создании экземпляра, а вот все что снаружи - всего лишь получает ссылку. Убедится в этом очень просто:
...
trace(obj2.method1.prop); // Выводит: 2 (свойство было изменено)
trace(obj2.method2.prop); // Выводит: 1 (свойство осталось неизменным)
А у меня получается "undefined" и "1"
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Jun 2005
Сообщений: 147
2 Inils: поправил.
2 wvxvw:
Цитата:
Цитата:
Это не значит, что при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль. Просто существуют такие обстоятельства, когда они это делать не могут.

Нет таких обстоятельств, всегда можно вызвать локальную функцию в теле родного класса.

А метод можно вызвать вне тела класса - в этом разница
Вы хотите вызвать приватный метод вне тела класса? Помилуйте, но это не возможно. Ни вне тела класса, ни на этапе исполнения...
2 __etc:
Это же вы пишите, что this имеет отношение к области видимости... я уже писал.
Цитата:
Так то что функция все видит, убедится очень легко... процитирую свой Код:
......................
var pa = this;//ссылка
//приват метод изменяте паблик свойство
function pMetA(){pa.a=10;}
..................
Как видите переменная pa - видна в приватном методе, да и будет видна в паблик методе. По этому не понятны притензии, якобы не видит верхний this...
this - указатель на объект активации функции, то есть на объект, который вызывает функцию, это может быть объект-экземпляр класса (функции). если функция вызывется из временной диграммы, то - ссылка на _level0, если функция внутри функции тупо лежит и не вызывается, то вы ничего не получите от this. К чему вы приплетаете сюда "this" из классового ООП? В АС3 если вы напишите внутри функции this, знаете что будет, но здесь - по другому.
Область видимости? - все переменные верхней функции видны.
__________________
видеоигры - высший вид искусства


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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от riden Посмотреть сообщение
this - указатель на объект активации функции
Господи, прекратите думать мыслями товарища Гурского, этот ваш объект активации настолько низкоуровневая вещь, что товарищ Гурский в начале параграфа заявил на двухсотой (!) странице, что пора прояснить «смутную общую картину языка» © (т.е. он пудрил мозги двести страниц), а в конце «какое из проявлений функции считать основным — ответить на этот вопрос очень и очень непросто» © (продолжаем дальше варить кашу). Т.е. он мало того, что сам толком не понял, о чем рассказывает, так ещё и запудривает мозги другим. Поэтому, пожалуйста, постарайтесь думать своей головой.
Ваш чудо-приватный метод с нормальным this, а не «объектом активации» из книжки Гурского будет выглядеть вот так:

Код:
function MyClass() {
	this.x = 10;
	
	function privateMethod() {
		trace('call privateMethod, i am: '+this);
		this.x = 20;
	}
	
	this.publicMethod = function() {
		trace('call publicMethod, i am: '+this);
		privateMethod.call(this);
	}
	
	this.toString = function() {
		return 'MyClass instance';
	}
}
o = new MyClass();
trace('o is '+o);
trace('o.x before = '+o.x); // 10
o.publicMethod();
trace('o.x after = '+o.x); // 20;
trace('o.privateMethod = '+o.privateMethod); // undefined
Конечно, для реализации всей этой красоты, нам придется воспользоваться множеством костылей, вроде call с apply и прочими танцами, зато создали инкапсуляцию на уровне языка, а не на уровне договоренности с самим с собой. Так вот. Меня интересует все эти три кита ООП в одном виде, примеры кода на AS3 я написал, хочу увидеть пример на AS1, опять же, на уровне языка, а не договоренности с самим с собой, что вооон тот белый столб на самом деле черный и вообще его там нет.

Старый 30.06.2008, 20:46
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 380  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
riden, func2 это приватный метод?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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