Just for the kicks i am trying to create a simple data object in javascript. Here is the code.
    var roverObject = function(){
        var newRover = {};
        var name;
        var xCord;
        var ycord;
        var direction;
        newRover.setName = function(newName) {
            name = newName;
        };
        newRover.getName = function() {
            return name;
        };
        newRover.setDirection = function(newDirection) {
            direction = newDirection;
        };
        newRover.getDirection = function() {
            return direction;
        };
        newRover.setXCord = function(newXCord) {
            xCord = newXCord;
        };
        newRover.getXCord = function() {
            return xCord;
        };
        newRover.setYCord = function(newYCord) {
            yCord = newYCord;
        };
        newRover.getYCord = function() {
            return yCord;
        };
        newRover.where = function(){
            return "Rover :: "+ name +" is at Location("+xCord+","+yCord+") pointing to "+direction;
        };
        return newRover;
    };
    rover1 = new roverObject();
    rover2 = new roverObject();     
    rover1.setName("Mars Rover");
    rover1.setDirection("NORTH");
    rover1.setXCord(2);
    rover1.setYCord(2);
    console.log(rover1.where());
    console.log(rover1);
    rover2.setName("Moon Rover");
    rover2.setDirection("SOUTH");       
    rover2.setXCord(1);
    rover2.setYCord(1);     
    console.log(rover2.where());        
    console.log(rover2); 
There are few questions that I have around this creation.
- I want to create an object where the properties/attributes of object are private and not visible to world. Am I successful in doing that? Can I really not access the object attributes?
- Is there a better way to create this kind of object?
- If I want to inherit this object, I should do a newObject.prototype = roverObjectwill that work? And will that make sense most of all.
- Finally I have a wierd problem. Notice the last method of objet "where" which returns a concatenated string. Here I tried following code instead. - newRover.where = function(){ return "Rover :: "+ name +" is at Location("+xCord+","+yCord+") pointing to "+direction; }();
and then did a following console.log
console.log(rover1.where);
console.log(rover2.where);
It threw following error for me:
cannot access optimized closure
Why would it say that? What am I doing wrong?
Thanks for all the help. Any review comments would be appreciated too! Cheers
 
     
     
     
     
     
    