Solo per i calci sto cercando di creare un oggetto dati semplice in javascript. Ecco il codice.Creazione oggetto in 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);
Ci sono alcune domande che ho intorno a questa creazione.
- Desidero creare un oggetto in cui le proprietà/gli attributi dell'oggetto sono privati e non visibili al mondo. Sono riuscito a farlo? Posso davvero non accedere agli attributi dell'oggetto?
- C'è un modo migliore per creare questo tipo di oggetto?
- Se voglio ereditare questo oggetto, dovrei fare un
newObject.prototype = roverObject
funzionerà? E questo ha un senso soprattutto. Finalmente ho un problema strano. Si noti l'ultimo metodo di objet "dove" che restituisce una stringa concatenata. Qui ho provato il seguente codice invece.
newRover.where = function(){ return "Rover :: "+ name +" is at Location("+xCord+","+yCord+") pointing to "+direction; }();
e poi ha fatto un seguito
console.log(rover1.where);
console.log(rover2.where);
gettò seguente errore console.log per me:
cannot access optimized closure
perché dovrebbe dire che? Che cosa sto facendo di sbagliato?
Grazie per tutto l'aiuto. Anche i commenti di revisione saranno apprezzati! Cheers
punto e virgola dimenticato su 'var newRover = {}' e su tutte le definizioni di funzione. – philfreo
grazie. Farà quel cambiamento. :) – Priyank
l'aggiunta di punto e virgola non risolverà comunque il problema, anche se lo – Priyank