Просмотр полной версии : Передача объекта
Возник такой вопрос:
Есть 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';
}
}
}
Спасибо что ответили, а как сделать так:
Есть два класса в одном пакете. В одном классе создается текстовое поле с именем 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;
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.