PDA

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


Void
09.08.2014, 18:50
Возник такой вопрос:

Есть 2 класса совмещенных в 1 пакете.
Первый:
package chat
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
class Test1 extends Sprite{
var a:TextField = new TextField();

public function Test1()
{
}
}
}
И второй:
package chat
{
class Test2{

public function Test1()
{
}
function qwerty():void
{
a.text = "123";
}
}
}
При импорте 2-го класса в другой пакет и попытки воспользоваться его методом "qwerty" возникает ошибка: Error: Access of undefined property qwerty.
Что я делаю не так?

LifeIsRhythm
09.08.2014, 19:49
Если не писать модификатор доступа, то по умолчанию будет internal, который доступен только внутри пакета.
Вообще не указывать модификаторы, это грубо для as3 и лучше научиться разбираться в них сразу.

Добавлено через 2 минуты
И то ли конструктор у Вас неправильно назван, то ли метод с большой буквы.

PedroHallo
09.08.2014, 19:53
a.text = "123";

Вы не определили экземпляр класса TextField, к которому обращаетесь.

Добавлено через 10 минут
package chat
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;

/**
* ...
*
*/
public class Main extends Sprite
{
private var textField:TextField;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}

private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
this.textField = new TextField();
this.addChild(this.textField);
const TEXT_TWO:Text2 = new Text2();
TEXT_TWO.qwerty(this.textField);
}

}

}


package chat
{
import flash.text.TextField;
/**
* ...
*
*/
internal class Text2
{

public function Text2()
{

}
internal function qwerty(textField:TextField):void
{
textField.text = '123';
}
}

}

Void
10.08.2014, 17:52
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

sospamom
10.08.2014, 21:52
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

package somePackage
{
import flash.display.Sprite;

public class Main extends Sprite
{
public function Main():void
{
var b:B = new B();
trace(b.txt);
}
}
}

package somePackage
{
import flash.text.TextField;

public class B
{
public var txt:TextField;

public function B()
{

}
}
}

Моше Дауге
10.08.2014, 23:23
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

package somePackage
{
import flash.display.Sprite;

public class Main extends Sprite
{
public function Main():void
{
var b:B = new B();
trace(b.txt);
}
}
}

package somePackage
{
import flash.text.TextField;

public class B
{
public var txt:TextField;

public function B()
{

}
}
}

Вы определили переменную экземпляра, а не класса.

Добавлено через 1 минуту
Спасибо что ответили, а как сделать так:

Есть два класса в одном пакете. В одном классе создается текстовое поле с именем txt, как к этому полю обратиться из 2-го класса?

var a:TextField = new TextField();

Вы определили переменную экземпляра, а значит, что к этой переменной можно обращаться только через экземпляр этого класса и через его потомков (если не считать ссылок).
Вам нужно определить статическую переменную — переменную класса, к которой можно обращаться только через класс, где определенна эта статическая переменная.
Чтобы определить статическую переменную Вам следует написать перед словом var слово static, и так как Вы хотите обращаться к статической переменной только в том пакете,
где она находится, то Вам следует написать перед словом static модификатор управления доступом internal — обращение внутри класса, в классах, находящихся в том же пакете, что и этот, и через потомков класса.

internal static var a:TextField = new TextField();

Чтобы обратиться к статической переменной Вам следует написать перед идентификатором статической переменной (её названием) название класса, в котором она определена.

Test1.a;