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

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

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от KidsKilla Посмотреть сообщение
wvxvw, "Я вам пытаюсь доказать, что приватных свойств в АС1 не существует." попробуйте доказать что земля квадратная. тоже нормальное занятие...
Это один из вариантов увиливания от ответа, т.н. демагогия. Мы не говорили про форму земли, ну ни разу до этого. Я никогда, даже в самом страшном сне не пытался утверждать, что земля квадратная, но, тем не менее, вы приписываете мне это высказывание =) Тем самым пытаясь подвергнуть сомнению другое утверждение никак не связанное с приписаным мне ложным =) Попросту - замыливаете глаза, пытаясь увести дискуссию от темы и выставить опонента дураком =)
__________________
Hell is the possibility of sanity

Старый 30.06.2008, 03:03
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 352  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
[увлеченно жует попкорн] ))
wvxvw, я за тебя! но не забывай про первое правило спора )).

Старый 30.06.2008, 04:04
KidsKilla вне форума Посмотреть профиль Отправить личное сообщение для KidsKilla Посетить домашнюю страницу KidsKilla Найти все сообщения от KidsKilla
  № 353  
Ответить с цитированием
KidsKilla
.grin! wuz here
 
Аватар для KidsKilla

Регистрация: Aug 2004
Адрес: paradise city
Сообщений: 3,981
Отправить сообщение для KidsKilla с помощью ICQ
wvxvw, я имел в виду то, что в ас1 есть приватные свойства. их назвали "локальными функциями". а вы пытаетесь доказать обратное. чтож, успехов.
от того что кто-то не признаёт очевидных вещей суть не меняется.
__________________
Breakcore them all!

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

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

Метод
  • Функцию можно назвать методом, если область ее видимости совпадает с областью видимости объекта, чьим методом она является.
  • Функция не является методом если она не доступна любому другому методу объекта, чьим методом она является.
  • Функцию можно назвать методом только по отношению к объекту создавшему ее.
Приватный метод
  • Приватным является такой метод, который можно вызвать из любого другого метода объекта, чьим методом он является, но ниоткуда более.
  • Обязательным атрибутом приватного метода является невозможность его переопределения / удаления из-за пределов объекта, чьим методом он является.

По моему глубокому убеждению функция созданная в конструкторе класса не удовлетворяет ни одному из вышеперечисленных условий.
Т.как ее область видимости разнится с областью видимости класса, чьим методом она должна быть. Методы объявленные позже на прототипе класса не имеют доступа к этой функции. Функцию объявленную таким образом можно вызвать с разными областями видимости используя call и apply.

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

Поскольку функция не является методом, то проверку на приватность считаю лишней.

В заключение: мне кажется семантически более верным называть такую функцию "локальной функцией" либо "служебной функцией" класса для отличия от метода, который исходя из семантики слова предполагает принадлежность чему либо.
__________________
Hell is the possibility of sanity

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

Регистрация: Jun 2005
Сообщений: 147
Цитата:
Сообщение от wvxvw
Class1.prototype.ImLookin4ThePrivateMethod = function(){
trace("Where in God's name did you put it? " + this.pMetA);
}
var c = new Class1();
c.ImLookin4ThePrivateMethod(); // output: Where in God's name did you put it? undefined
Сколько тебе раз еще говорить про this? this - это указатель на объект активации. Ты уже делал так, я тебе все говорил... Все мимо? Ты применяешь this -внутри локальной функции...
Ну так... ты не то что не смог обратистя к приватному методу - возвращает undefined, я вообще не понимаю на что ты расчитывал, применяя указатель this внутри локальной функции без объекта активации (то есть ни создан ее экземпляр функции, ни вызов функции в теле класса, что бы образовалось "область видимости" и появилась ссылка на указатель) - если бы ты это сделал, ты бы получил this, но так как у объекта активации(объект-экземпляр этой функции или сама функция) нет свойства pMetA, то все равно бы было undefined.
На pMet - ничего не ссылается, как ты собираешся к ней доступ получить? К чему эти танцы с бубном? Выше приведенная тобой функция может получить ссылку на this класса (а не функции, как у тебя)... И что дальше? Ты сможешь обратится к свойствам класса (то есть паблик), а все что не свойства класса, а находится внутри - приват.
Короче - не связный бред... не в тему.


Далее...
Цитата:
Код:
function Foo() {
this.testMethod = function() {
trace("Kiddin me, rrrrright?");
}
this.toString = function() {
return "[Foo]";
}
}
Foo = function () {
this.testMethod = function() {
trace("Me cool ");
}
this.toString = function() {
return "[Not Foo]";
}
}
var f = new Foo();
f.testMethod();Вот, пожалуйста =) и нет больше такого метода =)
Это что? Какого метода нет? И при чем здесь наличие приватных методов в классе, и возможность доступа к этим методам?

Вернемся же к теме (облегченный вариант):
Код:
function Class1(){
//паблик свойство
this.a = 4;
var pa = this;//ссылка
//приват метод изменяте паблик свойство
function pMetA(){pa.a=10;}

//паблик методы
function pmet1(){pMetA();}
function pmet2(){trace("do pmet2");}
this.met1=pmet1;//паблик метод
this.met2=pmet2; //паблик метод

}
////////////////////////////////////////
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
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 30.06.2008 в 05:41.
Старый 30.06.2008, 06:26
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 356  
Ответить с цитированием
riden
 
Аватар для riden

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

Цитата:
Сообщение от wvxvw
Методы объявленные позже на прототипе класса не имеют доступа к этой функции.
Да... похоже вы действительно не понимате приватность. Методы обяъявленные позже. Тоесть динамические - так? Где эти самые методы обявляются? Очевидно в теле другого класса. Так? Мы ведь про ООП говорим. Ну и что такое приват? Разве из другого класса мы должны получать доступ к приватным свойствам (для тебя, объект - набор свойств, если значение свойства - функция, то это метод; так что упрощенно все это называют свойствами, полями). Ну и почему методы созданные на этапе исполнения(то есть когда создаются экземпляры классов) (пускай даже на временной диаграме) должны иметь доступ к приват-свойствам класса? + в вашем случае, это всегда будет вне тела класса ("родного").
Если ты говоришь про что то другое, то я тебе уже приводил пример, как метод в прототипе (но не созданный динамично) получает доступ к приват свойствам.
Цитата:
Функцию объявленную таким образом можно вызвать с разными областями видимости используя call и apply.
Вызовите приват метод из тела другого класса, ну или пускай, раз в АС1, из области видимости диаграммы (хотя это уже не совсем ООП), где вы создаете экземпляр класса. pMetA - пост выше (код Class1)


Последний раз редактировалось riden; 30.06.2008 в 06:53.
Старый 30.06.2008, 09:24
chingachgoog вне форума Посмотреть профиль Найти все сообщения от chingachgoog
  № 357  
Ответить с цитированием
chingachgoog
Banned
[+4 01.02.09]
[+1 01.02.09]
 
Аватар для chingachgoog

блогер
Регистрация: Nov 2006
Адрес: Moscow
Сообщений: 2,145
Записей в блоге: 7
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
ну вопервых, это был не я. это общественность взбунтовалась, так как, кажется я своими 3мя основными принципами ООП, оказался к ним ближе.
Вы опять невнимательны. Я и не говорил, что это вы взбунтовались.
А общественность, если приглядитесь, "бунтует" странно: кроме вас вроде никто не решил отметится эпохальным заявлением, что AS1 - это не ООП язык (в этой части топика).

Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
и ещё: товарищу Гурскому, я бы с удовольствием выразил своё "ФИ". учить программирования на примерах ActionScript - это здавать быдло-программеров.
Я рад, что вы это сказали (вы-то, конечно не быдло - как можно сомневаться? )

Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
так вы же знаете ООП? откуда такие вопросы?
Вопрос был не к вам. Но мне понятно желание __ets скипнуть этот вопрос и ваше желание не отвечать на него.

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от chingachgoog Посмотреть сообщение
Но мне понятно желание __ets скипнуть этот вопрос и ваше желание не отвечать на него.
Товарищ индеец, перестаньте делать выводы на пустом месте, если я ушел пить пиво с друзьями на улицу, это вовсе не означает, что я решил скипнуть какой-то там ваш вопрос. У меня есть и другие дела, кроме как торчать с вами и другими в этой теме. Если хотите, можете повторить свои вопросы (я их искать после тучи ответов не буду, мне лень) в миллионный раз и получить в миллионный раз ответ.

Лично я уже давно все высказал здесь и полемизировать вы тут можете до посинения, но к знаменателю никто не придет, это уже очевидно.

UPD: Таки нашел вопрос:

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


Последний раз редактировалось etc; 30.06.2008 в 10:28.
Старый 30.06.2008, 13:38
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 359  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> Сколько тебе раз еще говорить про this? this - это указатель на объект активации.

курим мануал. ответ простой: нет. указатель на объект активации - argumetns.caller

>> Ну так... ты не то что не смог обратистя к приватному методу - возвращает undefined, я вообще не понимаю на что ты расчитывал

рассчитывал получить undefined. получил то, на что рассчитывал. Т.е. функция не является методом, пому, что другой метод не смог получить к ней доступ

>> Функция локальная может видеть глобальные свойства.

мне не не интересны в данном контексте глобальные свойства, мне нужны только свойства объекта, чьим методом эта функция должна быть. Опять же, она их не видит.

>> В AS3 функции имеют более узкое назначение и применение

ложь =)

>> Методы обяъявленные позже. Тоесть динамические - так?

Не вижу никакой связи с временем объявлении метода и тем будет ли он статическим или динамическим.

>> Ну и почему методы созданные на этапе исполнения(то есть когда создаются экземпляры классов) (пускай даже на временной диаграме) должны иметь доступ к приват-свойствам класса?

Это является обязательным атрибутом метода, иначе это не метод.

>> вне тела класса.

Вы путаете конструктор класса и сам класс.

>>> Функцию объявленную таким образом можно вызвать с разными областями
>>>видимости используя call и apply.
>> Вызовите приват метод из тела другого класса....

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

ЗЫ. То как я понимаю метод и приватный метод я описал в "тезисах" в предыдущем сообщении. Если вы считаете, что моя отправная точка не верная - тогда продолжать дискуссию не имеет смысла т.как дискуссия не может быть продуктивной если тезисы дискутирующих противоречивы.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 30.06.2008 в 13:50.
Старый 30.06.2008, 14:09
Ромастый вне форума Посмотреть профиль Отправить личное сообщение для Ромастый Найти все сообщения от Ромастый
  № 360  
Ответить с цитированием
Ромастый
 
Аватар для Ромастый

Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
Внесу и я свои 5 копеек по поводу пабликов/приватов
Создание локальных функций и ссылок на них внутри конструктора класса никак не может быть созданием методов. В первую очередь, как было справедливо замечено, из-за области видимости.
Как я догадываюсь, смутить умы может некоторая похожесть организации кода AS1:
Код:
function AS1Class() {
	function myMethod() {
               //....
	}
}
с AS2:
Код:
class AS2Class {
	function myMethod() {
		//...
	}
}
и AS3:
Код:
package {
	public class AS3Class {
		function myMethod() {
			//...
		}
	}
}
Вот только function AS1Class() {..} является не телом класса, а конструктором. Создавать в конструкторе методы - где вы такое видели?
В AS1 методы создавались через prototype:
Код:
function AS1Class(a) {
       //...
}

AS1Class.prototype.myMethod = function(a) {
	//....
}

AS1Class.prototype.myOtherMethod = function(b) {
	this.myMethod(b+1);	
}
И вот такие методы нормально сделать приватными мне не представляется реальным.
__________________
...Тебе страшно? Мне - нет.

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

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

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


 


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


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