|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 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,879
Записей в блоге: 7
|
Цитата:
Гурского надо внимательнее читать Он написал, что на быстрые регистры перевели this и arguments, а не объект активации. |
|
|||||
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
Цитата:
Теперь продолжим с "доказывающим примером" 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,879
Записей в блоге: 7
|
Цитата:
Цитата:
Цитата:
|
|
|||||
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
Т.е. твои доводы, что вложенная функция своим this не указывает на объект активации ВНЕШНЕЙ функции-оболочки, оказались ошибочными. Цитата:
Какое мне дело до спецификации, когда я только что при тебе сделал указатель на объект активации (z) и он действует уже ПОСЛЕ выполнения функции? В любое время к нему можно обратиться. |
|
|||||
Регистрация: Jun 2005
Сообщений: 147
|
OOP AS1 В ДЕЙСТВИИ 3 in 1: инкапсуляция, наследование, полиморфизм
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,879
Записей в блоге: 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,784
|
riden, я просил точную копию своих классов. Мне не нужны другие примеры, я привел пример и прошу реализовать его же, на AS1. Без какого-либо вмешательства в схему.
Последний раз редактировалось etc; 02.07.2008 в 23:12. |
Часовой пояс GMT +4, время: 18:32. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|