![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Цитата:
cx = 1;
function a () {
}
function b () {
function c () {
ASsetPropFlags (this, null, null, 1);
for (var i in this) {
trace ("\t" + i + " = " + this[i]);
}
}
trace ((cx++) + ".");
a.d = c;
c ();
trace ((cx++) + ".");
a.d ();
}
b ()
new b ();
setTimeout (b, 1000);
1. c = [type Function] arguments = this = _level0 2. d = [type Function] prototype = [object Object] __proto__ = [object Object] constructor = [type Function] 3. c = [type Function] super = [object Object] arguments = this = [object Object] 4. d = [type Function] prototype = [object Object] __proto__ = [object Object] constructor = [type Function] 5. c = [type Function] super = [type Function] arguments = this = 6. d = [type Function] prototype = [object Object] __proto__ = [object Object] constructor = [type Function] Дополнение, наткнулся на пост в блоге Нокса. Там он цитирует спецификацию ECMA-262 Цитата:
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
Т.е. если ты хочешь протестить свой код, то найди 6-й флеш-редактор (тот что MX) и протести там. Цитата:
![]() add: function b () {
function c () {
trace(this)
z=this
}
c ();
}
b ()
trace(z)
ASsetPropFlags (z, null, null, 1);
for (var i in z) {
trace ("\t" + i + " = " + z[i]);
}
И ничего удивительного тут нет. Реальный this функции "с" показывает, как и ожидается на объект активации функции "b". А этот объект активации (функции "b", а не "с"!) содержит в себе указатель this, куда? Правильно, на рут - тот объект, чьим методом является функция "b". Последний раз редактировалось chingachgoog; 02.07.2008 в 17:33. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Объект активации, это понятие плеера, а не понятие кода. Доступ к нему получить не возможно.Цитата:
Он написал, что на быстрые регистры перевели this и arguments, а не объект активации. |
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
(то что называется z - и есть ссылка на объект активации)Цитата:
Теперь продолжим с "доказывающим примером" ![]() function b () {
function c () {
trace(this)
z=this
}
c ();
}
setTimeout (b, 1000);
setTimeout(function(){
trace(z)
ASsetPropFlags (z, null, null, 1);
for (var i in z) {
trace ("\t" + i + " = " + z[i]);
}
},2000)
Т.е. вложенная функция, как и положено имеет свой this указывающий на объект активации. ЧТД А вот почему у функции-оболочки указатель this пустой - это надо спросить у тех, кто знает как устроены сетинтервалы и сеттаймауты. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Цитата:
Цитата:
|
|
|||||
|
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
Т.е. твои доводы, что вложенная функция своим this не указывает на объект активации ВНЕШНЕЙ функции-оболочки, оказались ошибочными. Цитата:
![]() Какое мне дело до спецификации, когда я только что при тебе сделал указатель на объект активации (z) и он действует уже ПОСЛЕ выполнения функции? В любое время к нему можно обратиться. |
|
|||||
|
Регистрация: Jun 2005
Сообщений: 147
|
OOP AS1 В ДЕЙСТВИИ 3 in 1: инкапсуляция, наследование, полиморфизм
Следует заметить что НАСЛЕДОВАНИЕ в AS1 - более широкое понятие. Здесь - наследование на уровне экземпляр-класс, наследование свойств прототипов класса, надкласса, наследование свойств созданных внутри конструктора и пр... В этом плане AS1 более гибок... такое наследование позволяет экономить память, ресурсы компьютора. Я покажу наследование - в "классическом" понимании, то есть как в AS3, Java, C#. Код: *IA - in action, в действии //Класс Rectangle - надкласс класса Square
function Rectangle(width,height){
this.test = "test";
var l2this=this;
function Private(){trace(l2this.test);}//приват метод// ИНКАПСУЛЯЦИЯ IA
this.callPrivate=function(){Private();}
this.width=width;
this.height=height;
this.ctest=function(){l2this.test="null";}
this.getArea=function(){return l2this.width*l2this.height;}
}
//наследование свойств созданных в конструкторе - НАФИГ
//Square.prototype = new Rectangle();
//для того что бы были видны свойства в прототипе надкласса - НАФИГ
//Square.prototype.__proto__= Rectangle.prototype;
//Класс Square - Подкласс класса Rectangle
function Square(size){
this.superClass = Rectangle;
//вызов этой функции обеспечивает истинный Полиморфизм :)
//Передача параметров в надкласс //аналог super
this.superClass(size,size);//вызывается каждый раз при создании экземпляра
this.size=size;
ASSetPropFlags(this,"width,height",7,null);//скрытие, защита непотребных свойств
//trace(this.width);//4, 5 //НАСЛЕДОВАНИЕ IA #1 //OK, свойства видны
}
//создание объектов с различной площадью
var sq=new Square(4); //ПОЛИМОРФИЗМ IA #1
var sq2=new Square(5);
//sq.test="0";trace(sq2.test);//test //ПОЛИМОРФИЗМ IA #2 :)
//метод изменяет свойство test экземпляра sq
//sq.ctest(); trace(sq.test);trace(sq2.test);//null test//все ОК. ПОЛИМОРФИЗМ IA #3
//sq.width=30;trace(sq.width);//4 - OK // не переопределяется //ЗАЩИТА РАБОТАЕТ
//trace(sq2.width);//5 //у экземпляра есть свойство надкласса //НАСЛЕДОВАНИЕ IA #2
//у экземпляров есть метод надкласса
//trace(sq.getArea());//16 //ПОЛИМОРФИЗМ IA #4 + НАСЛЕДОВАНИЕ IA #3
//trace(sq2.getArea());//25 //ПОЛИМОРФИЗМ IA #4 + НАСЛЕДОВАНИЕ IA #3
__________________
видеоигры - высший вид искусства Последний раз редактировалось riden; 03.07.2008 в 01:11. Причина: исправление ошибки в слове "приват" |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
function b () {
trace ("\tb:" + (this instanceof Object));
function c () {
trace (this);
z = this;
trace ("\t\t\t" + (this instanceof Object));
}
c ();
}
trace ("E")
e = new b ();
trace ("\tz:" + (z instanceof Object));
trace ("R")
r = b ();
trace ("\tz:" + (z instanceof Object));
trace ("Z")
setTimeout (b, 10);
setTimeout (function () {
trace (z);
trace ("\tz:" + (z instanceof Object));
}, 20);
А ты знаешь, что любой объект наследуется от Object |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
riden, я просил точную копию своих классов. Мне не нужны другие примеры, я привел пример и прошу реализовать его же, на AS1. Без какого-либо вмешательства в схему.
Последний раз редактировалось etc; 02.07.2008 в 23:12. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|