|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Цитата:
Я, в отличие от вас, не редактирую по 10 раз посты после того, как на первоначальные редакции уже были даны ответы. Если вы будете продолжать сначала писать одно, потом редактировать и писать другое через полчаса, тогда мне не о чем с вами разговаривать. После этого вы начинаете утверждать, что, якобы, у меня каша в голове. |
|
|||||
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
|
Цитата:
function a () { trace (this); } function b(){ trace (this); a() } new b() setInterval(a, 1000); _level0 undefined Ну вот откуда тут _level0? |
|
|||||
блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
|
Цитата:
Цитата:
Цитата:
Цитата:
function IMyClass(){ this.getRotation = function(){ return 'abstract method' }; }; function MyClass() { this.__proto__ = IMyClass; this.angle = 0; var calculateValue = function () { this.angle = 2*Math.PI*Math.random(); }; this.getRotation = function() { calculateValue.call(this); return this.angle/Math.PI*180; }; }; function AnotherMyClass() { this.__proto__ = MyClass; this.getRotation = function() { var rotation = this.__proto__.getRotation(); return rotation/2; }; this.getRadians = function() { return this.angle/2; } }; var iMyClass = new IMyClass(); var myClass = new myClass(); var aMyClass = new AnotherMyClass(); trace(iMyClass.calculateValue()) // "undefined" trace(iMyClass.getRadians()) // "undefined" trace(iMyClass.getRotation()) // "abstract method" trace(iMyClass.angle) // "undefined" trace(myClass.calculateValue()) // "undefined" trace(myClass.getRadians()) // "undefined" trace(myClass.getRotation()) // "152.942357249558" trace(myClass.angle) // "2.66934769976621" trace(aMyClass.calculateValue()) // "undefined" trace(aMyClass.getRadians()) // "1.3346738498831" trace(aMyClass.getRotation()) // "102.746495101601" trace(aMyClass.angle) // "3.58652926881432" Как я уже говорил АС1 и JavaScript являются прототипными ООП. Что свойственно для языков программирования без жесткой типизации, в которых нельзя ввести определение класса. Если ,etcs, хочет называть все прототипные языки программирования "неистенными" это его право, но только вместе с приставкой ООП. Последний раз редактировалось Яски; 01.07.2008 в 13:59. |
|
||||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
p.S. В моем нике всего три буквы и два подчеркивания, но почему в нём постоянно делают ошибки? То буквы местами перепутают, то «c» с «s», то одно подчеркивания вместо двух (хотя подчеркивания можно и опустить совсем). |
|
|||||
стервочка (я мужик)
|
Яски, есть ООП, а есть возможности языка с вашей логикой Вы мне можите доказывать, что Джава не язык программирования вовсе, так как там нету класса MovieClip что за бред Вы несёте про this, про inline-методы, перегрузка операторов? какое отношение к ООП они имеют? миксинг классов вообще фактически с точки зрения ООП, противопоказан.
Последний раз редактировалось BlooDHounD; 01.07.2008 в 15:07. |
|
|||||
Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
|
Цитата:
Если уж на то пошло, то и as1 класс создается НА ЭТАПЕ ИСПОЛНЕНИЯ кода в кадре, так что нет существенной разницы - добавили вы метод в конструкторе (так уж и быть, "теле" класса), или через prototype. Куда важнее, что а) - сохраняется область видимости; б) - все методы и свойства, добавленные в прототип, распространяются на ВСЕ экземпляры класса, а не создаются каждый заново при создании экземпляра. По мне, это куда ближе к концепции ООП. А создавать локальную функцию (по большому счету - независимый объект), делегировать ему функционал основного класса с помощью ссылки или apply/call - куда больший изврат. P.S. Задержался с ответом, но все же.
__________________
...Тебе страшно? Мне - нет. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Цитата:
Понятное дело, что проще инкапсулировать методы в собственной голове и закрыть глаза на то, что приваты торчат наружу. |
|
|||||
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
Ведь как только такой ответ будет дан, сразу будет видно, что чему отвечает и соответствует. Цитата:
argumetns.caller - указатель на объект функции, но не на объект активации. Это разные вещи. this - тоже не указатель на объект активации. Это свойство объекта активации, показывающее, чьим методом является функция. Объект активации во ФП6 можно просмотреть for in с помощью ASSetPropFlags(), будет видно что все локальные свойства (var) внутренние (вложенные) функции, массив arguments, свойство this - все это содержиться в объекте активации. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Цитата:
Цитата:
Посему, this в моем коде был изменен на более полезную и логичную область видимости экземпляра класса (ссылка на экземпляр). Это несколько лучше костыля с внешней ссылкой, но других способов сделать функцию приватной в AS1 лично я больше не вижу. И вообще, товарищ Гурский под объектом активации подразумевает как раз этот самый полуобъект-ссылку на локалку родительской функции, а вот большинство программистов, не знакомых с творчеством Гурского, под объектом активации понимают arguments.caller, т. е. метод/функция, вызвавший (активировавший) данный. Последний раз редактировалось etc; 01.07.2008 в 16:35. |
|
|||||
Banned
[+4 01.02.09]
[+1 01.02.09] |
Цитата:
Цитата:
Цитата:
iNils привел код, где трассируется указатель this. А this указывает на объект активации только в том случае, если функция вложена (тогда this из вложенной функции указывает на объект активации функции-оболочки) Цитата:
PS Кстати не __constructor__ а просто constructor |
Часовой пояс GMT +4, время: 04:54. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|