![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Modus ponens
|
>> 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. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
|
|
|||||
|
Modus ponens
|
Цитата:
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
2 Inils: поправил.
2 wvxvw: Цитата:
2 __etc: Это же вы пишите, что this имеет отношение к области видимости... я уже писал. Цитата:
Область видимости? - все переменные верхней функции видны.
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 30.06.2008 в 20:33. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Господи, прекратите думать мыслями товарища Гурского, этот ваш объект активации настолько низкоуровневая вещь, что товарищ Гурский в начале параграфа заявил на двухсотой (!) странице, что пора прояснить «смутную общую картину языка» © (т.е. он пудрил мозги двести страниц), а в конце «какое из проявлений функции считать основным — ответить на этот вопрос очень и очень непросто» © (продолжаем дальше варить кашу). Т.е. он мало того, что сам толком не понял, о чем рассказывает, так ещё и запудривает мозги другим. Поэтому, пожалуйста, постарайтесь думать своей головой.
Ваш чудо-приватный метод с нормальным 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
|
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
2 Inils: это здесь причем. Этот код я совершенно к другому вопросу привел. Нет конечно.
А приватный метод вот - pMetA 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
Цитата:
argumetns.callee - возвращает не объект активации, а определение функции, короче ссылается на саму функцию. А объект активации, как я уже писал - это объект который вызывает функцию. Код функции, например выполняется при использовании оператора new Func, при создании экземпляра класса(функции). Вот так будет правильно: function Class1(a){
this.a=a;
trace (this); //[object Object] //указатель на obj - экземпляр класса Class1
function localFunc(){
this.b=2;
trace(this); //[type Object]
trace(this.arguments);//аргумент функции внешней
//это подтверждает что объект активации - внешняя функция (Class1)
trace(this.a); //undefined
trace(this.b); //2
}
localFunc(); // вызов локальной функции, иначе this ничего не будет возвращать
//this.met = localFunc;
}
//Class1();
var obj = new Class1("аргумент функции внешней");
//c.met();
/*Выводит:
[object Object] //this
[type Object] //this
undefined
аргумент функции внешней //this.arguments
2 //this.b
*/
2 wvxvw: Цитата:
Я называю локальную функцию в prototype-based OOP AS1 - приватным методом. Разницу чувствуете?
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 30.06.2008 в 21:17. |
|
|||||
|
Modus ponens
|
>> Вы хотите вызвать приватный метод вне тела класса? Помилуйте, но это не возможно. Ни вне тела класса, ни на этапе исполнения...
Да, я хочу вызвать приватный метод и увидеть как компайлер, ну или на худой конец дебаггер расскажет мне об ошибке =) Это логичное и ожидаемое поведение приватного метода. Т.е. метод есть? - да есть. Вызвать можно? - нет, нельзя. А то получается, я взял ваш класс, а то, как вы форматируете код противоречит моим религиозным принципам и смотреть в него я не хочу . АПИ к вашим классам нету... и вот мне приходит в голову... а не создать ли мне публичный метод у вот этого класса - и кто мне скажет нет? Вполне легитимное желание =) Но, в зависимости от того, как вы реализовали ваш псевдо-приватный метод, мой вновь созданый либо его уничтожит, либо сам не будет работать - что приведет меня в глубокое замешательсво, и мне прийдется наплевав на религиозные принципы взять и переписать ваш класс =)От вас не требовался "prototype-based OOP AS1 - приватным метод". Нужен просто ООП приватный метод, без довесок в виде prototype-based =) ЗЫ. на протяжении этой дискусии я не извращался (хотя, правды ради, готов признать, что иногда я это делаю ) С самого моего первого поста я последовательно, ни разу не отказываясь провожу одну и ту же мысль, просто с каждым разом освещая другие ее аспекты, которые, возможно, были упущены из виду другими дискутантами.Мое убеждение остается таким же, каким и было: в АС1 приватных методов не существует, но существуют определенные воркараунды позволяющие добиться сходной функциональности, вместе с тем, каждый воркараунд имеет свои недостатки, справится с которыми не представляется возможным в силу отсутствия необходимого инструментария. Да, и еще, вы путаете arguments.callee и arguments.caller. Но эти ссылки могут указывать на один и тот же объект только в случае рекурсивного вызова функции. Во всех остальных случаях callee (дословно "вызываемый") указывает на текущую функцию, а caller (дословно "вызывающий") указывает на функцию, которая текущую функцию вызвала. И обе эти ссылки только случайно могут совпасть с this текущей функции т.как прямо с этим не связаны.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 30.06.2008 в 21:46. |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
К тому же представления о ООП в AS1 здесь оказались не четкими... Ведь Функция AS1 - играет роль класса, и тела класса. Вы же по прежнему сравниваете два ООП, я этого не делал. Пост - #333 Цитата:
Цитата:
Цитата:
Заметьте принципиальную разницу, я говорю только об AS1, не сравниваю языки. Свою позицию относительно AS3 я уже выразил в посте #333. То есть вы мне пытаететсь доказать то, что я и так знаю. Все это не ко мне... При попытках сравнивать языки, ООП, вопросов типо "AS3 оопэшнее, лчше, правильней...", и пр. возвращайтесь к посту 333 и читайте, читайте, читайте...
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 30.06.2008 в 22:06. |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:16. |
|
|
« Предыдущая тема | Следующая тема » |
|
|