Question

I'm modifying a module for a game that we are developing and it is built with ImpactJS game engine. What we wanted to do is to make the variables private or inaccessible to other classes.

For example:

this.object.variable = 100; // Not okay.
this.object.setVariable( 100 ); // Okay.

ig.module( 
    'game.data.server' 
).requires(

).defines(function(){

    ServerData = ig.class.Extend({
        _variable : -1,

        get variable() {
            return this._variable ;
        },
        setVariable: function( value ) {
            this._variable = value;
        }
    });
});

But JavaScript setter and getter return different outputs

We can't do several revisions because this is also accessed by other games that we are developing.

Is there a better solution?

Était-ce utile?

La solution

First possibility

You could try doing this but as I haven't developed anything using ImpactJS it may not work as expected as it depends what the .class.extend() function does internally.

But it's worth a try.

var ServerData = ig.class.Extend((function() {
    var privateVar = -1;
    return {
        getVariable: function() {
            return privateVar;
        },
        setVariable: function(value) {
            privateVar = value;
        }
    };
})());

This code may seem a bit confusing to you, but what I've changed I've created an immediately executing function to create a function closure, which is required to create private space in which I created private to closure variable that's not visible outside.

I would suggest you to read Douglas Crockford's Javascript and learn even more stuff about the language you're using.

Second possibility

According to link in comments it seems that we can use define's closure for private members as well:

var privateVar = -1;

var ServerData = ig.class.Extend({
    getVariable: function() {
        return privateVar;
    },
    setVariable: function(value) {
        privateVar = value;
    }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top