PDA

Просмотр полной версии : Как обратится к свойствам объекта в самом объекте


Akopalipsis
17.12.2013, 17:35
Возможно ли обратится в динамическом обьекте к его же свойствам?
var map:Object = { a:10,b:15,c:map['a']+map['b']};
...наверное поспешил и не подумал, что на момент обращения, обьект ещё не создан.
Но это же я :)

Hauts
17.12.2013, 17:39
var map:Object = { a:10,b:15 }
map.c = map.a + map.b;

Так можно :)

samana
17.12.2013, 17:42
При создании объекта, наверно нет.

Akopalipsis
17.12.2013, 17:43
Да, так можно, но я хотел сделать, что то типа "карты для обработки" обьектов с однотипными свойствами.
Просто два обьекта нужно делать. Точнее один уже есть, а второй создавать.

Добавлено через 3 минуты
Жалко только, что динамика медленнее. Есть способ её ускорить?

caseyryan
17.12.2013, 18:13
Есть способ её ускорить?
Зачем?
Ваш вопрос звучит так, как-будто скорость там на столько низкая, что можно вздремнуть, пока объект создается.
На самом деле в 99% случаев, эта разница в скорости не играет вообще никакой роли

А ускорить, если уж это нужно, можно отказом от динамики

iNils
17.12.2013, 19:53
обьект
обЪект, обЪект, обЪект, обЪект, обЪект!

Akopalipsis
20.12.2013, 00:49
Есть способ обратится динамически к локальной переменной?
private function fun(a:Number):void
{
var b:Number;
///обратится от сюда к а и b ?
}
обЪект, обЪект, обЪект, обЪект, обЪект!
Объект! :)

in4core
20.12.2013, 02:55
private function fun(a:Number):void
{
var b:Number;
trace(a,b) // ok
}

Akopalipsis
20.12.2013, 13:50
in4core Большое Спасибо!)

in4core
20.12.2013, 14:03
Честно говоря не понял за что спасибо...

Akopalipsis
20.12.2013, 14:17
Честно говоря не понял за что спасибо...
Так оно с улыбкой :) Ну или хотя бы за то, что развеселили.
Ну а что касается вопроса, то я спрашивал о -
private function fun(a:Number):void
{
var b:Number;
///обратится от сюда к ['а'] и ['b'] ?
}
Мне казалось, что если так можно обратится к свойствам класса, то возможно, если указать путь к методу, который является - обьектом ( или методы не объекты? ), то можно обращаться к локальным переменным.

MikroAcse
20.12.2013, 14:27
Нет, к локальным нельзя обращаться.
Советую никогда не использовать динамические классы.
Всегда есть выход с объектами или переменными.

Akopalipsis
20.12.2013, 14:34
Советую никогда не использовать динамические классы.
Всегда есть выход с объектами или переменными.
Да, Спасибо! Классы мне и не нужны, просто я уточнил, можно так или нет.
Немного не понял только о - объектах и переменных... Если обьекты, это классы, а не обьекты new Object(),
то динамика иногда нужна.

samana
20.12.2013, 15:08
Так оно с улыбкой :) Ну или хотя бы за то, что развеселили.
Ну а что касается вопроса, то я спрашивал о -
private function fun(a:Number):void
{
var b:Number;
///обратится от сюда к ['а'] и ['b'] ?
}
Мне казалось, что если так можно обратится к свойствам класса, то возможно, если указать путь к методу, который является - обьектом ( или методы не объекты? ), то можно обращаться к локальным переменным.
Может я что-то не понял, но обратиться к переменным (этого класса) можно и так:
private function fun(a:Number):void
{
var b:Number;
trace(b);// локальная переменная этой функции
trace(this.b);// переменная класса (если она конечно создана)
}

Akopalipsis
20.12.2013, 15:23
samana я вот о чем спрашивал -
private var target:Sprite;
private function test():void
{
var object:Sprite;
trace(this['target']);//к target я могу обратится
trace(this['object']);//а к object нет
}

samana
20.12.2013, 15:27
Конечно, ведь вы ищете object в this (в этом классе), а object создан лишь временно в данной функции. А зачем такие сложности? Что мешает обратиться к object напрямую?

Akopalipsis
20.12.2013, 15:32
Спросил я это, только для того, чтобы знать можно так или нет.
И что this на область класса указывает я тоже знаю, но мне не понятно вот что - метод, это объект?
И если да, то почему нельзя обратится в самом методе к его локальной переменной, типа test['object'].
Хотя на уровне понимания я понимаю, но вот однозначно нет.

samana
20.12.2013, 15:34
А, я только сейчас понял, о чём вы.

MikroAcse
20.12.2013, 15:51
Немного не понял только о - объектах и переменных...
Если вам нужна динамика, то делаете не весь класс таким, а объект внутри него:
MyClass {
var data:Object = {a:1, b:2};
}
Или, еще лучше, сделать переменными:
MyClass {
var a:int = 1;
var b:int = 2;
}

в самом методе к его локальной переменной, типа test['object'].
Потому что метод - это не объект, у него не свойств (почти).
Но вы можете обратиться к аргументам:
function a(b:int = 0, c:int = 2):void {
trace(arguments[0]); // 0
}

Akopalipsis
20.12.2013, 16:03
Потому что метод - это не объект, у него не свойств (почти).
Спасибо!
Но вы можете обратиться к аргументам:
И Спасибо!

dimarik
21.12.2013, 01:17
Конечно, ведь вы ищете object в this (в этом классе)

Чуть уточню, до точности "наоборот". this указывает на инстанс, никак не на класс.

samana
21.12.2013, 01:45
Спасибо за поправку. Согласен.