2015-07-02 3 views
0

При использовании ObjectUtil существует метод, называемый toString(), который принимает объект. Если вы передадите ему класс с именем «Person», он вернет строку «[class Person]».Есть ли у Flash метод, который делает обратную ссылку toString?

var person:Person = new Person(); 
trace(ObjectUtil.toString(person));//UPDATE I'm not using ObjectUtil.toString() 

// traces [class Person] 

Есть ли способ toObject()? То, что происходит в таком же формате ToString выходов и создает экземпляр так:

var person:Person = ObjectUtil.toObject("[class Person]"); 

UPDATE:
Извините. Это неверно. Я думал, что использую ObjectUtil.toString(). Я не был. Когда я использую этот метод возвращает что-то вроде:

(com.printui.assets.skins::fontList)#0 
    accessibilityDescription = "" 
    accessibilityEnabled = true 
    accessibilityImplementation = (null) 

В моем коде где-то возвращается «[класс Person]», как я описал. Это линия:

var currentValue:* = target[property]; 
popUpValueInput.text = currentValue; 

Я думал, что с помощью instance.toString(), но ToString() это что-то близкое к тому, что не возвращаются:

var f:fontList = new fontList(); 
var f1:fontList = new fontList(); 
trace("" + f); 
trace("" + f1); 
trace(f1.toString()); 

Результаты в:

fontList2 
fontList5 
fontList5 
+1

Ну , есть [getDefinitionByName] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/package.html#getDefinitionByName()), который возвращает объект указанного класса. В вашем случае 'var person: Person = getDefinitionByName (« Person »)', если имя класса неоднозначно, вы также можете использовать идентификатор типа 'getDefinitionByName (« com.example.Person »)'. – DodgerThud

+0

Хмм, что вы используете для ObjectUtils? Google говорит, что существует 'mx.utils.ObjectUtil' (отсутствует" s ") и' org.as3commons.lang.ObjectUtils' (этому не хватает метода statis 'toString()'). У последнего есть метод toInstance() ', который делает экземпляр данного класса из' Object', но не из строки. Вам лучше посмотреть на процесс сериализации, чтобы хранить объекты в виде строк/байтов. – Vesper

+0

Кроме того, в вашем случае ваша трассировка должна быть '[Object Person]', поскольку вы подаете ей экземпляр, а не описание cass. Может быть, почта, где вы получили это «ObjectUtils», полное имя класса и/или код. – Vesper

ответ

1

В общем, вы должны это сделать: В вашем классе «Человек» добавьте этот метод:

public function toString():String 
{ 
    return "Person" ; 
} 

Итак, чтобы сделать экземпляр класса с использованием имени этого кода:

var p = new (getDefinitionByName( ObjectUtils.toString(person))) 

или его можно использовать регулярное выражение в целом для всех классов (благодаря 1,21 гигаватт):

var p = new (getDefinitionByName(ObjectUtil.toString(Person).match(/\((.*)\)/)[1])); 
Смежные вопросы