![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
|
Цитата:
![]() Если уж на то пошло, то и as1 класс создается НА ЭТАПЕ ИСПОЛНЕНИЯ кода в кадре, так что нет существенной разницы - добавили вы метод в конструкторе (так уж и быть, "теле" класса), или через prototype. Куда важнее, что а) - сохраняется область видимости; б) - все методы и свойства, добавленные в прототип, распространяются на ВСЕ экземпляры класса, а не создаются каждый заново при создании экземпляра. По мне, это куда ближе к концепции ООП. А создавать локальную функцию (по большому счету - независимый объект), делегировать ему функционал основного класса с помощью ссылки или apply/call - куда больший изврат. P.S. Задержался с ответом, но все же.
__________________
...Тебе страшно? Мне - нет. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
![]() Понятное дело, что проще инкапсулировать методы в собственной голове и закрыть глаза на то, что приваты торчат наружу. |
|
|||||
|
.grin! wuz here
|
Цитата:
var x = new(function z(){
var private = function(){return 'private'};
this.public = function(){return 'public'};
this.meth = function(){
return [private(), this.public()];
}
})()
alert(x.private()) // Error
alert(x.public()) // "public"
alert(x.meth()) // "private, public"
x.private = function(){return '123'};
alert(x.meth()) // "private, public"
__________________
Breakcore them all! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
riden просто до сих пор не знает, как использовать call и apply, поэтому начинает нести пургу относительно this, то рассказывая про то, что он суть arguments.caller, то соглашался, что это ссылка на область видимости, теперь опять arguments.caller.
KidsKilla, мне не хочется повторяться, но около пяти страниц назад riden приводил тот же код, я у него попросил код, в котором вызванный приватный метод изменяет значение публичного свойства данного класса. Так вот, теперь я прошу показать такой код. А вообще, мне непонятно, если принять во внимание, что утверждение «AS1 — ООП язык», то этот самый язык должен реализовывать все принципы ООП, причем сразу вместе. Кто-нибудь может привести пример, в котором реализована сразу и инкапсуляция, и наследование, и переопределение с полиморфизмом. В AS3 это возможно, даже в AS2 (т.к. там был добавлен новый пикод extends для реализации наследования, которого нет в AS1). Если хотите, могу даже описать такой пример. С вас — реализация. |
|
|||||
|
Modus ponens
|
riden:
Вы упорно не хотите понять, что функция и метод это не одно и то же, и все время путаете и себя и остальных. Метод - это часный случай функции. у метода обязан быть this, у функции - нет. А вы это не понимаете. Это не значит, что при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль. Просто существуют такие обстоятельства, когда они это делать не могут.
__________________
Hell is the possibility of sanity |
|
|||||
|
.grin! wuz here
|
__etc
wvxvw, придираетесь к терминологии. "при определнных обстоятельствах функция и метод не могут выполнять одну и ту же роль." пример плз.
__________________
Breakcore them all! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Чего и следовало ожидать, как и riden-а, вывалился стандартный костыль в виде ссылки на самого себя и функция так и осталась локальной функцией и не работает, как метод.
|
|
|||||
|
.grin! wuz here
|
=> АС1 не ООП =))) отличная логика.
__________________
Breakcore them all! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Так прочитайте вторую часть моего поста, где я просил код. Был показан пример с приватным методом, т.е. метод инкапсулирован в класс (хоть и криво, менее кривым решением было бы использование call и apply и проблем с областями видимости не было бы). Но я хочу увидеть пример, реализовывающий сразу все принципе. Такой пример я сделал на AS3:
package {
public class MyClass implements IMyClass {
public function MyClass() {
super();
}
public var angle:Number = 0;
public function getRotation():Number {
this.calculateValue();
return this.angle/Math.PI*180;
}
private function calculateValue():void {
this.angle = 2*Math.PI*Math.random();
}
}
}
package {
public class AnotherMyClass extends MyClass {
public function AnotherMyClass() {
super();
}
public override function getRotation():Number {
var rotation:Number = super.getRotation();
return rotation/2;
}
}
}
Я прошу привести реализацию этих двух классов на AS1, с учетом и реализацией уровней доступа к свойствам и переменных. Я согласен на формулировку «AS1 — псевдо-ООП язык», но никак не на «AS1 — ООП-язык». То, что на встроенном уровне есть какие-то классы и простое наличие объектов не делает язык по настоящему объекто-ориентированным. |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
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.свойство = функция. Цитата:
Еще раз, почему функция в AS1 - это и конструктор и тело класса... Во первых, потому что: Цитата:
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 (свойство осталось неизменным)
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 30.06.2008 в 20:00. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:43. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|