![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
.grin! wuz here
|
var x = new(function z(){
var private = 'private';
this.public = 'public';
this.meth = function(){
return [private, this.public];
}
})()
alert(x.private) // undefined
alert(x.public) // "public"
alert(x.meth()) // "private, public"
x.private = '123';
alert(x.meth()) // "private, public"
Цитата:
Цитата:
__________________
Breakcore them all! |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Цитата:
![]() |
|
||||||
|
Регистрация: Jun 2005
Сообщений: 147
|
Цитата:
В остальном prototype может использоватся как ссылка, для того что бы НА ЭТАПЕ ИСПОЛНЕНИЯ СОЗДАТЬ НОВОЕ СВОЙСТВО (так и делает wvxvw) Не вижу ни какой сязи с prototype и созданием свойств (методов) вне конструктора (тела класса). Я уже приводил код, как это делается в теле класса. 2Ромастый... если вы не видели мой код, создание свойств и методов делается так в АС1, в теле класса: var бла бла // приват свойство
функция(){одна одинешенька, на меня никто не ссилается} //приват метод
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
*/
И еще про область видимости. Вашим тупым аргументом является, то что this вызванное из функции без объекта активации, возвращает undefined. Вы применяете обман, и утверждаете что функция не видит "выше" (выше-вложенной функции, то есть функции-тела ласса). Так то что функция все видит, убедится очень легко... процитирую свой код... ......................
var pa = this;//ссылка
//приват метод изменяте паблик свойство
function pMetA(){pa.a=10;}
..................
Цитата:
![]() Цитата:
![]() Или у вас такой малый опыт програмирования, или что.. не знаю, что вы не можете провести аналогии между AS1 и AS3... Или на временной диаграме вы это зделаете, или в теле другого класса, к приват вы уже не имеете никакого отношения... Или вы напрочь забыли для чего приват свойста? Функция в AS1, которая имеет объект активации в виде объекта инициализированного оператором new, и есть класс, так как с этого момента (new) this данной функции будет ссылатся на объект активации, на каждый экземпляр и заполнять пустой объект свойствами this."свойство". Вот код, и апровержения я так и не увидел. Приватный метод 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
![]() Последний раз редактировалось riden; 30.06.2008 в 15:20. |
|
|||||
|
.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 — ООП-язык». То, что на встроенном уровне есть какие-то классы и простое наличие объектов не делает язык по настоящему объекто-ориентированным. |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|