Просмотр полной версии : Как узнать кто вызвал метод?
Вопрос вот в чем. Может ли метод экземпляра класса знать какой именно экземпляр его вызвал?
Доступ к экземпляру предоставляется при помощи ключевого слова this.
Можно, если знаете как отличить экземпляры класса instance1,....?:)
MikroAcse
17.10.2013, 10:18
Конечно никак. Видимо у Вас архитеркутра не правильная, раз такое понадобилось.
А по this вы узнаете только в каком классе находиться функция, и то, если она не глобальная и не статическая.
caseyryan
17.10.2013, 10:25
Встречный вопрос: для чего?
нужно для того, чтоб конструктор сам делал addChild на в экземпляр вызвавший его.
Akopalipsis
17.10.2013, 14:38
нужно для того, чтоб конструктор сам делал addChild на в экземпляр вызвавший его.
А можно немного подробнее, потому что в жизни, конструктор только при создании экземпляра вызывается.
Получается, что при создании экземпляра класса, Вы хотите чтобы он сам добавился в список отображения?
Вот так Вам нужно или Вы про что то другое говорите?
package
{
import flash.display.DisplayObjectContainer;
public class NewClass
{
private var _doc:DisplayObjectContainer;
public function NewClass(doc:DisplayObjectContainer)
{
_doc.addChild(this);
}
}
}
2 Akopalipsis
я просто думал, что есть такой способ, для широкого использования...
Добавлено через 4 минуты
2 in4core
спасибо, пойду копать
Zebestov
17.10.2013, 15:55
arguments.calle
1. arguments.callee
2. это "ссылка на функцию, выполняемую в настоящий момент"
По теме: передавать методу все необходимое в качестве аргументов — не криминал.
2 in4core
я так понял, он возвращает вызывающую функцию, то есть сам метод? а как потом можно перейти к объекту?
Добавлено через 42 секунды
2 Zebestov
не криминал, но и никошерно
this - ссылка на экземпляр, чего ТС и просил, о чем в первом же посте C4Grey и сказал
дальше какая-то тень на плетень
>>если знаете как отличить экземпляры класса instance1,....?
не очень понятно зачем это знать, this это он и есть
>>по this вы узнаете только в каком классе находиться функция, и то, если она не глобальная и не статическая.
ну не может метод экземпляра быть статическим..
по this можно узнать и класс, конечно, но причем здесь это и почему 'только'
>>arguments.calle
ссылка на сам метод
видимо, чтоб окончательно все запутать :)
MikroAcse
17.10.2013, 16:12
не криминал,но и никошерно
В любом случае лучше, чем Ваш вариант, который еще и нерешаемый.
silin, он хочет знать Кто вызвал конструктор/функцию, а не то, где эта функция находится.
он хочет знать 'Может ли метод экземпляра класса знать какой именно экземпляр его вызвал'
this в конструкторе ничем не отличается от this в любом другом методе
Akopalipsis
17.10.2013, 16:23
ТС вроде хочет в момент создания экземпляра, в конструкторе этого экземпляра узнать класс, который его создал, чтобы в том же конструкторе сделать что то типа parent.addChild(this)
Добавлено через 1 минуту
Не понятно только почему его ссылка на отображение в конструкторе пугает, это же одно и тоже.
Меня тоже по первом моментам немного пугало передачи this в конструктор, но
это из - за того, что я плохо понимал работу, мне казалось, что я передаю все классы которые находятся в отображении.
ТС, Вы не груду классов передаёте, а всего лишь ссылку, по которому Ваш класс найдет дорогу в aadChild().
Zebestov
17.10.2013, 16:24
передавать методу все необходимое в качестве аргументов — не криминал.
не криминал, но и никошерно
Ну т.е. если функции нужны данные, получить которые никакими нативными средствами не представляется возможным, то передавать эти данные в качестве аргументов "не стоит". И как эта функция поставленную задачу решит, можно узнать?
ТС хочет знать как конструктору прикрепить самого себя внутрь "мувика" который его создал.
парент вроде катит только после добавления на экран.
я не отказываюсь передавать в конструктор this, это не так сложно... просто интересуюсь можно ли по другому....
всем спасибо за ответы!
По this нельзя определить вызывающий экземпляр. Но если он проименует его и протрейсит, то определит имя класса и трейс с именем экземпляра в том методе где экземпляр вызывает.
Добавлено через 1 минуту
с мувиками все проще.
AlexLucas
17.10.2013, 17:00
По this нельзя определить вызывающий экземпляр.
В не статичном методе класса нельзя определить объект который его вызывает через this ?
Либо вы не поняли контекста, либо вы единственный кто понимает чего же на самом деле хочет ТС.
любой экземпляр это this и есть. Вопрос только отличить один от другого
Добавлено через 1 минуту
под словом определить я имею ввиду идентифицировать
caseyryan
17.10.2013, 17:10
Прочитал всю тему, так и не понял что конкретно нужно. Задача какая-то бессмысленная.
не криминал, но и никошерно
Можно поинтересоваться, с чего такие выводы?
2 caseyryan
чисто личное чувство эстетики негодует...
я же говорю, просто искал еще возможные варианты
Akopalipsis
19.10.2013, 21:23
Каждый раз, когда я читал упоминания о статических методах, то в них отзывались о них неоднозначно.
По этому я хочу спросить - на сколько код неправильный?
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
private var _viewManager:ViewManager;
private var _subClass:SubClass;
public function Main()
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_viewManager = new ViewManager(this);
_subClass = new SubClass();
}
}
}
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
public class SuperClass extends Sprite
{
public function SuperClass(type:SuperClass=null)
{
if (type) ViewManager.add(type);
}
}
}
package
{
public class SubClass extends SuperClass
{
public function SubClass(type:SuperClass=null)
{
super(this);
}
}
}
package
{
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.events.Event;
import flash.events.EventDispatcher;
public class ViewManager extends EventDispatcher
{
private var _doc:DisplayObjectContainer;
private static var _storage:Vector.<SuperClass>;
private static var _dispatcer:EventDispatcher;
public function ViewManager(doc:DisplayObjectContainer)
{
_doc = doc;
_storage = Vector.<SuperClass>([]);
_dispatcer = new EventDispatcher();
_dispatcer.addEventListener(Event.CHANGE, addDoc);
}
public static function add(type:SuperClass):void
{
_storage.push(type);
_dispatcer.dispatchEvent(new Event(Event.CHANGE));
}
private function addDoc(event:Event):void
{
_doc.addChild(_storage[_storage.length-1] as DisplayObject);
}
}
}
То есть при создании нового экземпляра ViewManager статический _storage обнуляется? В чем прикол?
В семейке EventDispatcher вообще не смог разобраться. Вроде сам класс его наследует, но зачем то создает статическую композицию с левым экземпляром диспатчера, который к тому же выкидывается и заменяется свеженьким при каждом создании экземпляра класса... ничего не понял.
Добавлено через 10 минут
чисто личное чувство эстетики негодует...Мое негодует, когда дети указывают родителям, как их рожать. Объясните, пожалуйста, что мешает делать в природном порядке var stranger:Stranger = this.addChild(new Stranger()) as Stranger;
?
Кому нужен класс, делающий с родителями, что ему вздумается?
Контейнер и его содержимое не должны находится в родственной связи это инцест какой-то
Akopalipsis
21.10.2013, 02:51
Контейнер и его содержимое не должны находится в родственной связи это инцест какой-то
Согласен, я переделал.
Не должны в основном потому, что контейнер может наполняться и сторонними виджетами в т.ч., которые могут быть проксированны и иметь с контейнером только общий интерфейс.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.