ActionScript 3.0 :: Difference Between Getter And Setter And Public Var
Jun 28, 2009i dont get the advantages of using getter and setter instead of setting the var public.
View 7 Repliesi dont get the advantages of using getter and setter instead of setting the var public.
View 7 RepliesIs it possible to have a property with a public getter and protected setter? I have the following code:
public class Mob extends Sprite {
// snip
private var _health:Number; // tried making this protected, didn't work
public function get health():Number { return _health; }
protected function set health(value:Number):void {
[Code]...
I did have this.health -= dmg; but I split it out to get more details on the compiler errors. I don't understand how the property would be considered read-only within the same class. I also don't understand how it's inaccessible. If I make the backing field, getter, and setter all protected, it compiles but it's not the result I want; I need health to be readable externally.
Which is a much better practice in binding a value in Flex?
View 2 RepliesI have a problem whereby in AS3 using Flash Builder 4 using a public getter with an internal setter gives me the error "property is read only", like so:
[Code]...
I've created an AS class to use as a data model, shown here:
package
{
import mx.controls.Alert;
[code].....
I'm having trouble updating a property value of a custom class (SubLoader) using a getter and setter. Inside the if() statement of the main fla you can see my attempt to set the percent value. Running a trace() method before the if() statement always outputs '0' for some reason. Tracing after the if() statment outputs an actual value. I can't figure out why the percent property always traces as '0' before the if statement even though I am updating it with each progress event.
[Code]...
Anyone know a workaround to make static getter/setters?
View 2 RepliesI seem to have run into a situation where when I push a value to an array held within a singleton via a getter/setter , Flash seem so access the getter over the setter method. Within my command/controller (I am using RobotLegs)
override public function execute():void {
// various line of code here
//Place screenshot image into an array from model for later reference.
model.unitScreenshots.push(screenShot); // screenshot is just a Bitmap object
}
The getter and setter within my model e.g. robot legs singleton
public function get unitScreenshots():Array {
return _unitScreenshots;
} public function set unitScreenshots(value:Array):void {
_unitScreenshots = value;
}
When I set a break point on both the getter and setter, only the getter method is being called, why? I would think that a push value on the array would trigger the setter, not the getter.
I'm trying to create a property that can be set by extending classed and read publicly.I couldn't think of a good naming convention for a protected property with a public getter, so I tried to do this:
public function get name():String{ return _name; }
protected function set name(string:String):void
{[code]......
However I get the error (when trying to set name in an extending class): 1178: Attempted access of inaccessible property name through a
reference with static type testing:TestComponent.1059: Property is read-only.
If I change the setter to public, it works fine.
I recently completed a tic-tac-toe game in AS3, using some simple function-based code I had written in C many years ago.Now I'm on a quest to do it the "right way" using OOP techniques and best practices.Everything is now divided into neat little packages, it looks pretty, and the last part of my journey is to get all the little buggers to communicate with each other.I want to move the code which holds the game state from my main to it's own class in com.okaygraphics.model.GameState.The problem is nearly every other package gets and sets these game state properties.I'm trying to figure out the simplest way to encapsulate this stuff, while still allowing my other classes to access it.
1) Do I need a constructor? I mean, my program will never have more than one GameState. If I should call my getters/setters as instance methods, how do I get each other class to reference the SAME instance from their respective packages?
2) Do I even need getters and setters? Perhaps the class could just have 3 public properties? If so, how would I acheive the proper scope with regard to my other classes?
3) Should I assign everything to the class itself using the static keyword? If so, how would I implement and use those static methods?
4) Is this a mistake? Did I totally just program myself into a corner?
I have two functions one that sets and one that gets a number. The set one works, but the get one doesn't. I have it trace the set it returns the correct number, but when I set the getY function, it doesn't give me anything at all. When i took the number out of the trace it just gave me back only text. What am I doing wrong here?
ActionScript Code:
public function setY(y):void {
y = y;
[code].....
I have a .as file with class Main which contains:
Code:
public function set Set_AnimationFile(FileName:String):void
{
this.FileName=FileName;
[Code]....
How do i access these functions from my timeline script?
I have tried
[Code].....
I have written a class, which is basically a textfield for forms. It will eventually have several validation modes built into it too, which will be set by setting a property of the object.anyway, my problem. Basically my setters are empty if the movie is used as a loaded swf within another movie.I have an Event listener within the class listening for the Event.ACTIVATE event (still not sure exactly what this does...) though i do know that i need this in place for the setters/getters to work.If i create objects from my class, set some properties everything is spot on, though the moment i load this working movie into another movie the Event.ACTIVATE does not fire.[code]Now, if i run this movie its perfect - everything works as it should, right down to the validation.however, this movie is to be used within another movie. When i load this movie into a parent movie my fields aren't added to the movie.
View 5 RepliesI'm trying to make a class that extends the Sprite, have some private properties attached to it and be able to read and write those properties using getters and setters. Simple... but the compiler throw this error "Access of possibly undefined property speed through a reference with static type flash.display:Sprite."It works if I set my class to extend the MovieClip object.Could someone explain me the logic behind this? why I can't use getter and setters with a Sprite?Here is a sample code:
package {
import flash.display.Sprite;
public class Vehicle extends Sprite{
[code].....
I'm trying to make a class that extends the Sprite, have some private properties attached to it and be able to read and write those properties using getters and setters. Simple... but the compiler throw this error "Access of possibly undefined property speed through a reference with static type flash.display:Sprite."It works if I set my class to extend the MovieClip object. someone explain me the logic behind this? why I can't use getter and setters with a Sprite?
[Code]...
"Getting" the hang of Getter/Setter methods, but could use a review of my syntax. Does the follwing demonstrate best practices, meaning the least awarkward application of the technique?
Code:
// in Calculator.as
class Calculator {
private var _priceCD:Number;
private var _priceShocks:Number;
private var _priceCover:Number;
[Code]...
The generally used workaround for this, is to use a regular function instead of a getter/setter. This results in having to have ( ) after the function variable obviously. The question is, can a Function variable be assigned to a getter/setter function and retain its attribute of not needing brackets.
Below is some Pseudo code representing the question:
#########################################################
public class Foo(){
private var prop:Object;
public function get Prop():Object{return prop;}
[Code].....
Im just starting to get my hands into Action Script v2, and Im having a really hard time working out what the difference is between Public, Private and Static Variables, it seems that declaring variables in these types makes no difference what so ever to the avaliablility of my variables... Could someone be so kind as to put me on the right path?
View 2 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...
is it better to use public variables or public static variables?
View 6 RepliesI have a setter and getter method , the getter method should return an array collection but it's always returning an empty array collection even when I've run trace to check on it.[code]...
View 1 RepliesI'm finally reading up on commenting code with ASDoc (http:url]....) but the way ASDoc is set up doesn't seem to agree with the way I write my getter/setters.Here is how I write them:
Code:
//I want to add the ASDoc tags here, before this chunk of code
private var _enabled:Boolean = true;
public function get enabled():Boolean[code]...
if I ad the tags where I want them, if I understand correctly, they will comment the private variable instead. Bummer.So, either I change the coding style I have been using for the past three years, or insert the tags inside of my code, making it ugly and less structured. I'm leaning towards option A.how do YOU write your getter/setters so they are ASDoc friendly?
In Flex, you can add functions to the prototype of a Class; but how do you add a setter? For example, with A some (non-dynamic) class, you can do this:
var o:Object = new A();
A.prototype.myFunction = function():void{trace("foo");}
o.foo();
And that will call the foo function. But how could you add a setter, so that setting the property calls the setter (just like it would if you declared the setter in the "normal" way on the A class). So what I want is something like this:
// doesn't work!
A.prototype["set myProperty"] = mySetter;
o.myProperty = "test"; // should call mySetter
PS: Manipulating the prototype is an unusual thing to do in Flex, and not something I'd recommend in general. But for the sake of this question, just assume that there is a reason to dynamically add a setter.
I'm trying access my Document class (Manager) from within a movieclip in my fla, to set one variable within Manager. Manager is within the folder "code", and just like any class it's simple enough to write "var mng:code.Manager;", except I'm not sure how to define Manager:
"var mng:code.Manager = new Manager();" gives "Error #2136 .swf contains invalid data", for what seems to be the general redundancy of initiating the Document class again from the fla.So, how do I reference the Manager, so that I can simply write "mng.setVar = whatever;"?
super.zValue(n) should be super.zValue = n ........ wowy Nothing to see here folks, just keep moving on I'm having some difficulties in working with the as3 way of overriding methods.. specifically setters. I'm a recent convert from working with as2 for a few years, so some of these quirks are beyond me right now.Here are my two classes:class tempBase in package core
Code:
package core
{
import flash.display.MovieClip;
public class tempBase extends MovieClip
[code]....
I do not have any errors for the override of baseFunction, but on compile I get the error 1061: Call to a possibly undefined method zValue through a reference with static type core:tempBase.In as2, this would have been perfectly acceptable (even without the override function), and was incredibly useful in creating my class structures.
I frequently find myself wanting more granular control of the width/height properties. Consider either of the following cases:
- The DisplayObject is clipped with DisplayObject.mask, but Flash reports unmasked width.
- An image is displayed with a transform cage drawn over it. The width of the cage shouldn't be calculated when determining the DisplayObject's width.
The naive way to solve this problem is to override the width getter of the DisplayObject in question. The problem is that the core implementation of DisplayObject.width is written in native code. If after overriding the width getter, I call overridenObject.width, I get what I want; however, if I call overriddenObject.parent.width, DisplayObject.width ignores my override and calculates the dimensions based on its own internal display list representation.
Does anyone know of a technique to limit which children are considered when calculating width without having to override every parent's width getter? I've tried overriding width, getRect, getBounds, and scrollRect, but none of them seem to be referenced by DisplayObject.width's native implementation.
I found this snippet of code when I walked through a Flex3.6 project:
[Bindable(event='currentPageChanged')]
public function get currentPage ():int {
return this._currentPage;
[code].....
I've found two very strange pieces of code in PureMVC's documentation:
[Code]....
(found in Best Practices [English], bottom of page 38 and top of page 39) I've always thought that getters must not accept a parameter (and FDT indeed tells me that "Parameters for getters are not allowed"), so I wonder what's going on here. Is that just an unfortunate typo (meant to be simply a normal function without the "get") or some hidden feature/voodoo?
Like I understand that if you're assigning something within a class it would have to involve what's extended to this class.So if a class extends MovieClip, would you only Set properties that involve the MovieClip object?Adversely, with Getter functions you could be retrieving anything from XML to volume. So that can't have anything to do with what that class is extending towards right?Is that how the extends relationship works with Get (return) and Set (value) functions?
View 9 RepliesI am currently making a class called TiltVideo that extends BasicView (papervision3d).
BasicView has a getter function that returns a camera that I need to access.