Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

declaring protected variable in javascript

Tags:

javascript

oop

How do i declare protected variable. Let me give an example here

// Constructor
function Car(){

   // Private Variable
   var model;
}

// Public variable
Car.prototype.price = "5 Lakhs";

// Subtype
function Indiancar(){
}

// Prototype chaining
Indiancar.prototype = new Car();


// Instantiating Superclass object
var c = new Car();

// Instantiating subclass object
var ic = new Indiancar();

in this I would like to have a variable that is accessible as ic.variabl that is also present in car class.

like image 327
indianwebdevil Avatar asked Sep 20 '25 07:09

indianwebdevil


2 Answers

You would do something like this:

var Base = function()
{
    var somePrivateVariable = 'Hello World';

    this.GetVariable = function()
        {
            return somePrivateVariable;
        };

    this.SetVariable = function(newText)
        {
            somePrivateVariable = newText;
        };
};

var Derived = function()
{
};

Derived.prototype = new Base();

var instance = new Derived();

alert(instance.GetVariable());
instance.SetVariable('SomethingElse');
alert(instance.GetVariable());

Assuming I understood your question correctly.

EDIT: Updating with true 'private' variable.

like image 55
Tejs Avatar answered Sep 22 '25 22:09

Tejs


There is a way to define protected variables in JavaScript:

A constructor function in javascript may return any object (not necesserily this). One could create a constructor function, that returns a proxy object, that contains proxy methods to the "real" methods of the "real" instance object. This may sound complicated, but it is not; here is a code snippet:

var MyClass = function() {
    var instanceObj = this;
    var proxyObj = {
        myPublicMethod: function() {
            return instanceObj.myPublicMethod.apply(instanceObj, arguments);
        }
    }
    return proxyObj;
};
MyClass.prototype = {
    _myPrivateMethod: function() {
        ...
    },
    myPublicMethod: function() {
        ...
    }
};

The nice thing is that the proxy creation can be automated, if we define a convention for naming the protected methods. I created a little library that does exactly this: http://idya.github.com/oolib/

like image 23
slobo Avatar answered Sep 22 '25 20:09

slobo