Flash Zone Forum > Ïîëó÷èòü çíà÷åíèÿ ñâîéñòâà îäíîãî êëàññà èç äðóãîãî
Ïîìîùü · Ïîèñê · Ïîëüçîâàòåëè · Êàëåíäàðü
Ïîëíàÿ âåðñèÿ ýòîé ñòðàíèöû: Ïîëó÷èòü çíà÷åíèÿ ñâîéñòâà îäíîãî êëàññà èç äðóãîãî
Flash Zone Forum > Macromedia Flash > ÎÎÏ âî Flash
HaWK
Åñòü êëàññ äîêóìåíòà:
Êîä
package {
  
   import flash.display.MovieClip;

   public class Main extends MovieClip {
       public var myVar:int;
  
       public function Main() {
           myVar = 5;
       }
   }
}

È åñòü äðóãîé êëàññ. Êàê ìíå èç äðóãîãî êëàññà ïîëó÷èòü çíà÷åíèå ñâîéñòâà myVar êëàññà äîêóìåíòà?
MustLive
Öèòàòà
È åñòü äðóãîé êëàññ. Êàê ìíå èç äðóãîãî êëàññà ïîëó÷èòü çíà÷åíèå ñâîéñòâà myVar êëàññà äîêóìåíòà?

Ñòàíäàðòíûì äëÿ ÎÎÏ ïóò¸ì - ÷åðåç ìåòîäû êëàññà. Ò.å. â îäíîì êëàññå (Main) òû ñîçäà¸øü ìåòîä äëÿ äîñòóïà ê ñâîéñòâó (myVar), à èç äðóãîãî êëàññà (èç ëþáûõ äðóãèõ êëàññîâ) ê íåìó îáðàùàåøüñÿ.

Äîáàâü â êëàññ Main ñëåäóþùèé ìåòîä:
Êîä
       public function getVar() {
           return myVar;
       }

Ïðè ýòîì ñàìî ñâîéñòâî myVar òû ìîæåøü ñäåëàòü private, à íå public (÷òîáû òîëüêî ÷åðåç ìåòîäû ìîæíî áûëî ê íåìó îáðàòèòüñÿ). Èíà÷å ìîæíî áóäåò íàïðÿìóþ ê ñâîéñòâó îáðàùàòüñÿ.

Êîä
Main MyObject = new Main();
trace(MyObject.getVar()); // îáðàùåíèå ÷åðåç ìåòîä (ïðè myVar êàê public, òàê è private)
trace(MyObject.myVar); // îáðàùåíèå íàïðÿìóþ ê ñâîéñòâó (ïðè myVar êàê public)

Ïðè myVar êàê public âîçìîæíî íå òîëüêî ÷òåíèå, íî è çàïèñü íàïðÿìóþ â ñâîéñòâî (MyObject.myVar = 1), à åñëè áû myVar áûë private, òî ýòîãî íåëüçÿ áûëî áû ñäåëàòü (íè ïðî÷èòàòü, íè çàïèñàòü íàïðÿìóþ), è äëÿ çàïèñè íóæíî áûëî áû ñäåëàòü ñîîòâåòñòâóþùèé ìåòîä.
HaWK
Âîîáùå ýêçåìïëÿð êëàññà äîêóìåíòà ñîçäà¸òñÿ òîëüêî îäèí ðàç, MustLive. Ìíå íóäíî ïîëó÷èòü èìåííî èç íåãî ýòî ñâîéñòâî.
Òû â êóðñå ÷òî òàêîå êëàññ äîêóìåíòà?
MustLive
Öèòàòà
Âîîáùå ýêçåìïëÿð êëàññà äîêóìåíòà ñîçäà¸òñÿ òîëüêî îäèí ðàç, MustLive. Ìíå íóäíî ïîëó÷èòü èìåííî èç íåãî ýòî ñâîéñòâî.

HaWK

Íó ðàç ñîçäàëñÿ ó òåáÿ îäèí ðàç ýêçåìïëÿð, òî è ñ÷èòûâàé èç íåãî ñâîéñòâà. Êàê ýòî ñäåëàòü, ÿ îïèñàë âûøå.

Êëàññ äîêóìåíòà òû îïèñàë êàê class Main (ò.å. ÿ ïîíÿë, ÷òî ýòî êàêîé-òî òâîé êëàññ). Âîò ÿ è ïðèâ¸ë ïðèìåð êîäà äëÿ ðàáîòû ñ íèì. Åñëè ýòî êàêîé-òî ñòàíäàðòíûé êëàññ (à ñ êëàññàìè AS3 ÿ íå çíàêîì), ïîñòàâëÿåìûé ñ ôëåøåì, òî ïî÷èòàé åãî äîêóìåíòàöèþ èëè èçó÷è èñõîäíèê (åñëè íåò âîçìîæíîñòè/âðåìåíè/æåëàíèÿ ÷èòàòü äîêóìåíòàöèþ), è âîñïîëüçóéñÿ òåìè ñïîñîáàìè, ÷òî ÿ îïèñàë âûøå. È ïðî÷èòàåøü çíà÷åíèå ýòîãî ñâîéñòâà.
HaWK
Äà ýòî ìîé êëàññ. È åãî ýêçåìïëÿð ñîçäà¸òñÿ îäèí ðàç (ñàìèì Flash). Âîò êàê ê íåìó îáðàòèòñÿ ÿ íå çíàþ.
MustLive
Öèòàòà
È åãî ýêçåìïëÿð ñîçäà¸òñÿ îäèí ðàç (ñàìèì Flash). Âîò êàê ê íåìó îáðàòèòñÿ ÿ íå çíàþ.

Îòêóäà òû çíàåøü, ÷òî îí ñîçäà¸òñÿ? Åñëè òû îá ýòîì ÷èòàë â êàêîé-ëèáî äîêóìåíòàöèè, òî òàì è ïðî÷èòàé î òîì, êàê ê äàííîìó ýêçåìïëÿðó îáðàòèòüñÿ.

×òîáû ïðîâåðèòü, ÷òî ôëåø àâòîìàòè÷åñêè ñîçäà¸ò ýêçåìïëÿð êëàññà Main, âîçüìè â êîíñòðóêòîðå êëàññà (function Main()) âûâåäè òðåéñ (çà myVar), ÷òîáû ïîëó÷èòü ðåçóëüòàò â îêíå Output:
Êîä
myVar = 5;
trace(myVar);

Åñëè ýòîò ýêçåìïëÿð ñîçäà¸òñÿ (÷òî òû ïðîâåðèøü âûøåïðèâåä¸ííûì êîäîì), òî ó íåãî åñòü èìÿ. Âîò èìÿ ýòîãî ýêçåìïëÿðà òåáå í.á. âûÿñíèòü. È ïî èìåíè îáðàùàòüñÿ ê ñâîéñòâó (îäíèì èç äâóõ ñïîñîáîâ, ÷òî ÿ îïèñàë ðàíåå).
HaWK
ML!
Öèòàòà
Îòêóäà òû çíàåøü, ÷òî îí ñîçäà¸òñÿ? Åñëè òû îá ýòîì ÷èòàë â êàêîé-ëèáî äîêóìåíòàöèè, òî òàì è ïðî÷èòàé î òîì, êàê ê äàííîìó ýêçåìïëÿðó îáðàòèòüñÿ.

Íå íóæíî ÷èòàòü îá ýòîì, îá ýòîì óæå ïîðà çíàòü.  AS3 ñîâñåì äðóãàÿ ñòðóêòóðà. Åñëè äîïóñòèì â AS2 ÿ ìîã íà ðóòå îáúÿâèòü ïåðåìåííóþ è ïîòîì îáðàùàòüñÿ ê íåé ñ ëþáîãî ìåñòà ïðîãðàììû ïðîñòî ÷åðåç _root.myVar, òî â AS3 òàê óæå íå ïîëó÷èòñÿ. _root - òåïåðü ýòî êëàññ äîêóìåíòà è ôèã çíàåò êàê ê íåìó îáðàòèòñÿ èçâíå (ñ äðóãèõ êëàññîâ). Åñëè âíóòðè íåãî ÿ åù¸ ìîãó ÷èòàòü åãî æå ñâîéñòâà, òî èçâíå íå ìîãó. Âîò ìíå è íàäî âûÿñíèòü êàê ýòî äåëàòü, ïîýòîìó ÿ ñîçäàë òåìó.

Åñëè áû ìíå ïðîñòî íàäî áûëî ïîëó÷èòü ñâîéñòâî ÿ áû íå ïèñàë çäåñü. Ìíå íàäî ïîëó÷èòü ñâîéñòâî êëàññà äîêóìåíòà (òî áèøü _root) èç äðóãîãî êëàññà.
chingachgoog
Öèòàòà(HaWK @ 18.10.2010 - 02:11) *
Åñëè äîïóñòèì â AS2 ÿ ìîã íà ðóòå îáúÿâèòü ïåðåìåííóþ è ïîòîì îáðàùàòüñÿ ê íåé ñ ëþáîãî ìåñòà ïðîãðàììû ïðîñòî ÷åðåç _root.myVar, òî â AS3 òàê óæå íå ïîëó÷èòñÿ.


Äà íó?
 êîíñòðóêòîðå êëàññà Äîêóìåíòà ïèøåì
Êîä
trace("Main "+(this==root))

È ñìîòðèì ðåçóëüòàò.

tongue.gif
HaWK
Ëàäíî, ÿ â êóðñå ýòîãî. Íî ïî÷åìó êîãäà ÿ ïèøó â äðóãîì êëàññå:
Êîä
trace(root.myVar);

Ïîëó÷àþ:
1120: Îáðàùåíèå íåñóùåñòâóþùåãî ñâîéñòâà root.

? ? ?
chingachgoog
À â äðóãîì êëàññå âîîáùå ìîæåò íå áûòü ñâîéñòâà root, åñëè ýòî íå ïîòîìîê DisplayObject, ëèáî îíî ìîæåò áûòü ðàâíûì null.
HaWK
À êàê îáðàòèòñÿ ê ñâîéñòâó ýêçåìïëÿðà êëàññà äîêóìåíòà èç äðóãîãî êëàññà?
chingachgoog
Ïåðåäàòü â ýòîò äðóãîé êëàññ ññûëêó íà ñåáÿ ïðè ïîñòðîåíèè, íàïðèìåð.

Òèïà:

// Èç êëàññà Äîêóìåíòà
// var otherClass:OtherClass=new OtherClass(this)
HaWK
ýýý.... è êàê âñ¸ ýòî äîëæíî ðàáîòàòü?
Êàê ìíå ïîòîì îáðàùàòüñÿ èç ýòîãî äðóãîãî êëàññà?
chingachgoog
Êîä
package {
    import flash.display.*
    
    public class Main extends Sprite {
        public const DELTA="qewqw"
        public function Main(){
            var z=new A(this)
            z.use1()
        }
    }
}


Êîä
package {    
    public class A {
        var pat
        public function A(par){
            pat=par
        }
        public function use1(){
            trace("ñóïåðêëàññ "+pat.DELTA)
        }
    }            
}


Ìîæíî òàê. Ìîæíî â Main ñòàòè÷åñêîå ñâîéñòâî ñäåëàòü ñ ññûëêîé íà ñâîé åäèíñòâåííûé ýêçåìïëÿð. Ìíîãî ñïîñîáîâ.

PS

Êñòàòè â AS1/2 _root ìîæåò áûòü òàêæå íå åäèíñòâåííûì.
HaWK
Âîîáùå ó ìåíÿ êîíñòðóêòîð äðóãîãî êëàññà çàíÿò äðóãèìè ïàðàìåòðàìè, à òóò â êà÷åñòâå ïàðàìåòðà êîíñòðóêòîðó ïåðåäà¸òñÿ ýêçåìïëÿð äîêóìåíòà êëàññà. Âñ¸ òàê çàïóòàííî, ëó÷øå äðóãèå ñïîñîáû smile.gif, èëè ýòî ëó÷øèé?
chingachgoog
Öèòàòà(HaWK @ 18.10.2010 - 13:46) *
òóò â êà÷åñòâå ïàðàìåòðà êîíñòðóêòîðó ïåðåäà¸òñÿ ýêçåìïëÿð äîêóìåíòà êëàññà.


Íå ýêçåìïëÿð êëàññà äîêóìåíòà, à ññûëêà íà ýêçåìïëÿð.
Âòîðîé ñïîñîá ÿ ñêàçàë. Òðåòèé è êóâûðíàäöàòûé íàéäåò òîò êòî èùåò )))
HaWK
ß òàê ïîíÿë ëó÷øå ñäåëàòü òàê:
public static var prop:DisplayObject = this;

È ïîòîì îáðàùàòüñÿ â ëþáîì êëàññå:
Main.prop.myvar

Õîòÿ ÿ åù¸ íå ïðîáîâàë, íî íàäåþñü ñðàáîòàåò
HaWK
Äà... íè ôèãà íå ïîëó÷èëîñü.
Âîò:
1042: Êëþ÷åâîå ñëîâî "this" íå ìîæåò èñïîëüçîâàòüñÿ â ñòàòè÷åñêèõ ìåòîäàõ. Îíî ìîæåò èñïîëüçîâàòüñÿ òîëüêî â ìåòîäàõ ýêçåìïëÿðà, â çàêðûòèè ôóíêöèé è â ãëîáàëüíûõ êîäàõ.
chingachgoog
Öèòàòà(HaWK @ 19.10.2010 - 12:49) *
Äà... íè ôèãà íå ïîëó÷èëîñü.
Âîò:
1042: Êëþ÷åâîå ñëîâî "this" íå ìîæåò èñïîëüçîâàòüñÿ â ñòàòè÷åñêèõ ìåòîäàõ. Îíî ìîæåò èñïîëüçîâàòüñÿ òîëüêî â ìåòîäàõ ýêçåìïëÿðà, â çàêðûòèè ôóíêöèé è â ãëîáàëüíûõ êîäàõ.


Âñå ïðàâèëüíî, â ñòàòè÷åñêèõ ÌÅÒÎÄÀÕ êàê æå ìîæíî èñïîëüçîâàòü this?
Ñòàòè÷åñêèå ìåòîäû è ñâîéñòâà - ýòî ìåòîäû è ñâîéñòâà êëàññà.

public static var prop:DisplayObject // ïðîñòî îáúÿâëÿåì
à âîò â êîíñòðóêòîðå êëàññà óæå âñòàâèì çíà÷åíèå this:
prop=this
HaWK
Îøèáî÷êà:
trace(Main.prop.myVar);
1119: Îáðàùåíèå âîçìîæíîãî íåîïðåäåëåííîãî ñâîéñòâà myVar ÷åðåç ññûëêó ñî ñòàòè÷åñêèì òèïîì flash.display:DisplayObject .
chingachgoog
Ýòî òóïîé êîìïèëÿòîð ðóãàåòñÿ, ÷òî ïðîãðàììèñò çàáûë ïðèâåñòè òèïû.
HaWK
Çà÷åì îáçûâàòü êîìïèëÿòîð? Ýòî "íàñòàâíèê" áë* çàáûë ïîäñêàçàòü ïðîãðàììèñòó ïðèâåñòè òèïû, ÷òîáû ïîòîì âûå*íóòñÿ.
chingachgoog
Öèòàòà(HaWK @ 19.10.2010 - 13:51) *
Çà÷åì îáçûâàòü êîìïèëÿòîð? Ýòî "íàñòàâíèê" áë* çàáûë ïîäñêàçàòü ïðîãðàììèñòó ïðèâåñòè òèïû, ÷òîáû ïîòîì âûå*íóòñÿ.


Ó ìåíÿ ñòðîãèé ðåæèì êîìïèëÿöèè íå âêëþ÷åí tongue.gif
Ðóññêàÿ âåðñèÿ IP.Board © 2001-2011 IPS, Inc.