Solo por las patadas que estoy tratando de crear un objeto de datos simple en javascript. Aquí está el código.Creación de objetos en javascript
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);
Hay pocas preguntas que tengo sobre esta creación.
- Quiero crear un objeto donde las propiedades/atributos del objeto sean privadas y no visibles para el mundo. ¿Tengo éxito en hacer eso? ¿Realmente no puedo acceder a los atributos del objeto?
- ¿Existe alguna forma mejor de crear este tipo de objeto?
- Si quiero heredar este objeto, debería hacer un
newObject.prototype = roverObject
¿funcionará? Y eso tiene sentido más que nada. Finalmente tengo un problema raro. Observe el último método del objeto "where" que devuelve una cadena concatenada. Aquí traté de seguir el código en su lugar.
newRover.where = function(){ return "Rover :: "+ name +" is at Location("+xCord+","+yCord+") pointing to "+direction; }();
y luego hizo un siguiente
console.log(rover1.where);
console.log(rover2.where);
arrojó siguiente error console.log para mí:
cannot access optimized closure
¿Por qué dice eso? ¿Qué estoy haciendo mal?
Gracias por la ayuda. ¡Cualquier comentario de revisión sería apreciado también! Cheers
olvidó punto y coma en 'newRover var = {}' y en todas sus definiciones de funciones. – philfreo
gracias. Hará ese cambio. :) – Priyank
Agregar punto y coma no resolverá el problema aunque – Priyank