ActionScript 3.0 :: Why Should Keep All Class Properties Private
Jun 4, 2011I've heard it's considered best practice to keep all class properties private and to change them using getter and setter methods.
View 5 RepliesI've heard it's considered best practice to keep all class properties private and to change them using getter and setter methods.
View 5 RepliesWhy static method cant access private properties in the same class?
View 1 RepliesOkay so you've got your private vars in your AS2 Class, you think they're all safe right? Wrong.
Doing a trace(MyClass.myvar); will spit out an error that the var is private and you can't touch it.
But a trace(MyClass["myvar"]); will work perfectly fine. You can use it normal, without any setters getters outside the class.
Is there a way to protect against this? I think this is a huge security flaw. I know it's simple OOP, but a private var in an object should have rules.
Is there a way to use the sortOn() method of the Array class to sort an array of objects by a private property?I've tried using a getter function, but Flash didn't like it.It doesn't seem right to leave a property as public, but the sortOn() method is very handy -
View 4 Replieshow bad is this practice? I am having trouble getting to some stuff so i am taking the easy way out
Code:
private static var _interrupted:Boolean;
public static function setInterrupted(value:Boolean):void{
_interrupted = value;
}
here is a snippet of my code in an as file
ActionScript Code:
class PoolBall extends MovieClip {
private var poolBall:MovieClip;
[code].....
i have created a Vehicle.as file and a Car.as file which are in the same project. The problem i am having is trying to use the properties in my Car.as from my Vehicle.as file.Vehicle.as
Code:
package
{
[code]......
I try to serialize objects with their private attributes, in Flex.
The introspection API does not seem to allow it:
"The describeType() method returns only public members. The method does not return private members of the caller's superclass or any other class where the caller is not an instance."
Is there another way for an instance to know the name of its private members?
I have a class which deals with a lot of visuals, which essentially are movieclips. So I have around 50 privately declared movieclips in the class. Would it be a good idea to put them in a dictionary and retrieve them by their name (as key) , put them in an array or just leave them as they are?
My issue is the visual look of my class right now with that many private members, looks like a mess visually.
I am writing class that extends adobe air PNGEncoder,
I want to use the writeChunk method, but it seems to be private static and i cant seems to use it with my code But it gives the error as below
[Code].....
I have some code from a CS3 app composed of the .FLA file with an .AS file for the class that had definitions for two private classes in it. Yesterday I brought the files into CS4 and noticed that they did not compile. Gives an 1120, access of undefined property and names a constant. I have reduced this problem down to bare bones and it still occurs, so it is a bug in CS4.
[Code]....
there are classes definitions where all their methods are private my question is why are they private, because i've tried a code wherein i changed all the private access modifier to public and nothing changed!
what if you make an instance of that class with all its method private, how are you be able to access that on another class. coz i know private methods are only accessible to the class where they are declared! will the instance of that class be able to access the superclass's private methods!
on private variables, it's still not clear to me as to why make a private variable and then use a getter and setter, when you can simply make it public! are these variables called static?cause on the way i understand it private functions and private variables are static?
I have a class that creates an array from a config xml file. I set a private variable in that class and use a getter in other classes to access the array. The routine that uses the array does the following:
- Call the getter and assign the returned value to a local (private) variable tmpArray. the getter is a simple return() using a value that is established in the constructor.
- Uses a for loop to itterate over the contents
- Uses array.shift() to pop the item in tmpArray
The next time I run the routine, the contents of the array is empty. I'm using the same getter. I implemented the getter when I tried to manage both arrays in the same class figuring that as long as the original array was private (i also tried static), that the value would not change. I have since worked around the problem by moving the routine that fills up the original value from the constructor to the getter. So, consider the following code:
import flash.events.Event;
btn.addEventListener("click", btnHandler);
var myArray = new Array();
var myTmpArray = new Array()
myArray = ["one", "two", "three"];
myTmpArray = myArray;
function btnHandler(evt:Event) {
[Code] .....
If I create a variable myVar and set it to 1 then set myOtherVar = myVar, the both equal the same value. If I change the value of myOtherVar, myVar is not affected. But using the shift() method changes both the original and the copied array.
I have .fla file where I have instantiated an object of a class( testclass.as ) like this in frame 1
[Code]...
Currently I have two classes which are "bullet" and "enemy".There are two instances of the enemy class.Code from an ENTER_FRAME event in the Bullet Class:
ActionScript Code:
try
{
for(var k:int=0; k<getEnemys.length; k++)
[code]....
The Enemy Class has a private variable called "hits".What do I have to do in order to reduce the hits of the instance of the enemy that was hit by the bullet?
These two functions are taken out of my as class file, even though the setInterval is never cleared it only calls generateParticles 1 time. Someone please help me figure this out. I have been messing around with it over an hour but still can find why its only called once. emit is a private var Number declared outside the function in the class.
[Code]...
I have a Color class where all the data is stored in a single uint named "_value". However, the constructor for Color looks like this:
public function Color(r:uint = 0, g:uint = 0, b:uint = 0):void
{ _value = (makeChar(r) << 16 | makeChar(g) << 8 | makeChar(b)); }
If I want to create a clone() method, I have to first convert the "_value" variable to an RGB object, then, the constructor automatically converts the object back into a hexadecimal value. Blatent waste of efficiency! However, I would rather have the constructor be user friendly and allow them to type in each color value instead of one hex value (they can use the Color.fromHex() if they really want to, but it does the same as the clone() method and converts back and forth).
Is there any way to instantiate a class without going through the one single constructor function? Any way to set up a private constructor in addition to the public one? Most Visual Studio languages allowed you to have multiple constructors, and the chosen constructor is determined by the passed in arguments. This was really convenient, but sadly, AS3 only allows one constructor, right?
I'm setting up functions in a document class file, then from there I am going to call that function from a movieclip in flash. For some reason, maybe I have things set up wrong, but it is throwing me errors such as below: Line 37 1013: The private attribute may be used only on class property definitions. What am I doing wrong here and is there something I am not understanding? Here is my .as code. modal.as > package
[Code]...
This error is just making me wanna commit where have i gone wrong? Help would be awesomepackage classes
[Code]...
Why I am losing scope on an array that i define as a private member in a class? I am able to access it from a couple of different functions but in one place inparticular it keeps coming up "undefined". What causes scope to be lost in a function for an array that is defined as a private class member?
View 4 RepliesI have this sample class
Code:
class TestPrivate{
public function TestPrivate(){};
private function getGo(){
trace("can execute");
}}
And then after instantiate I just calling the method...for testing the "public" and "private" keyword purposing only...
Code:
import TestPrivate;
var obj1 = new TestPrivate();
obj1.getGo();
The result is still can be execute even though I put the private keyword in front of the methods. So what's the private keyword stands for actually...I thought it prevent been get accessed from outside...
Here's my main class:
[code]...
in the timeline I have a dynamic text box named my_textbox: var my_test:main = new main(); my_test.check_DVBViewer(); my_textbox.text = ??Basically the class waits for the callback variable (my_msg). The problem is: I need to set the dynamic textbox text to my_msg variable. How can I access it? I know I can access a public var in the timeline with functioname.variable but I can't define a public var inside a function, right?
I'm building a drag and drop quiz. each draggable mc (drag#) has a base class of DragDrop. I want to detect when an drag mc has been dropped on a target
Code:
if(this.hitTestObject(target)) {}
And then add a new drag from the drops Array. so that each time a drag finds its target a new one appears. I tried to make a public var named dropped to switch from "yes" to "no" in the drop function. and even tried making the drop function public.
This code is on the timeline
stop();
var drag1:Drag1;
drag1 = new Drag1;
addChild(drag1);
drag1.x = 100;
drag1.y = 100;
[Code] .....
Here's my code:
[URL]
The errors are one line 123 and 128.I've googled the error, but I still can't fix it, it's got me baffled for an hour now! I've tried adding curly brace's but still same error. I left line 123 and 128 like this
function _update(e:Event):void
{
_helicopter.update(_mouseDown);
}
function onEnterFrame(e:Event):void
{'
But I'm getting an error stating that _update is not defined
I keep getting this error in my class file main.as this is a translator application. I was able to get the animations working at one point but now I am stuck with this error and I don't understand it.
main.as:
package
{
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.net.URLLoader;
[code].....
I have written a framework that facilitates RPC calls between AS3 and PHP 5 called FlashMOG. I recently got a forum request that has introduced a pretty bizarre question regarding access control. This will be a lot easier to discuss if you have access to the FlashMOG 0.3.1 client source which is here:
[code]...
The basic idea is that I have a FlashMOGService class which has an RPCSocket member that it may share with other FlashMOGService objects. The idea is that you can create two distinct FlashMOGService objects and have them both connect to the same host/port via socket. I use my special RPCSocket class for two reasons:
1) Let developers use one port but separate functionality into two distinct services...a form of multiplexing i guess
2) RPCSocket adds functionality to the standard Socket class that works to serialize and unserialize data and get it where it needs to go. The essence of the problem here is that created a class with a FlashMOGService object as a member and has tried to assign a private method of his class as an event handler to the FlashMOGService object:
[Code]....
My initial thought is that this should be fine because it's all done within the class. However, when I consider the monkey chain that results in this function being called, it seems almost logical that it wouldn't work. The problem is that the browser freezes when a socket message arrives that tries to call the service's client method, _service.client.firstClientMethod. This client firstClientMethod is attempted when data arrives from the server on the Socket (an RPCSocket, actually). The RPCSocket class deserializes the socket data and extracts an array with a service name, a method name, and an array of arguments. It looks into its own private class variable (an array of services using the RPCSocket) and tries to invoke whatever function was assigned thusly:
[Code]....
I'm guessing there's some kind of infinite loop going on to check access control for the various intertwined classes.
I need to use stage.width/height in my CustomClass so I found some topics about it.
if (stage)
{
init(ar,firma,kontakt,oferta,naglowek,tekst,dane);
[code]......
is there a difference between classifying a function 'private' or 'private static' in a singleton? It seems that they both do the same thing. Maybe some difference in performance?
[Code].....
I have a class, call it MyClass, and there are several variables that I need to be able to access each instance of from within the class.So for instance, I need the object myObject1, a member of MyClass, to store the variable myNumber.From the main timeline, if I trace myObject1.myNumber, I get whatever number I've stored.
However, I need to check the numbers against another parameter, so I need to be able to test if myObject.myNumber == myOtherNumber. But from within the class, if I trace this.myNumber or myNumber I get null.What is the proper syntax for accessing a variable within a class?
I have an mc called sunny. In the properties panel I export her for actionscript. I put Sunny in the main class and Drag in the base class. The reason for this is that I want her to be draggable. I can't use Drag in the main class as another object is using that name. The Drag.as has the drag functionality. Why can't I drag her. I already have a solution - I wrote a specific class for her and extended the Drag class. However, if I have 10 mcs I'm not going to write specific classes for all of them. Summing up: Using the base class Drag in properties panel - why isn't she draggable?
View 7 Replies