Chỉ dành cho các cú đá tôi đang cố gắng tạo một đối tượng dữ liệu đơn giản trong javascript. Đây là mã.Tạo đối tượng trong 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);
Có một vài câu hỏi mà tôi có xung quanh sự sáng tạo này.
- Tôi muốn tạo đối tượng nơi thuộc tính/thuộc tính của đối tượng là riêng tư và không hiển thị với mọi người. Tôi có thành công trong việc đó không? Tôi có thể thực sự không truy cập vào các thuộc tính đối tượng không?
- Có cách nào tốt hơn để tạo loại đối tượng này không?
- Nếu tôi muốn kế thừa đối tượng này, tôi nên làm một
newObject.prototype = roverObject
sẽ hoạt động? Và điều đó có ý nghĩa nhất của tất cả. Cuối cùng tôi gặp vấn đề khó xử. Chú ý phương pháp cuối cùng của objet "ở đâu" trả về một chuỗi được ghép nối. Ở đây tôi đã thử mã sau để thay thế.
newRover.where = function(){ return "Rover :: "+ name +" is at Location("+xCord+","+yCord+") pointing to "+direction; }();
và sau đó đã làm một lỗi
console.log(rover1.where);
console.log(rover2.where);
Nó ném sau console.log sau cho tôi:
cannot access optimized closure
Tại sao nó sẽ lại nói thế? Tôi đang làm gì sai?
Cảm ơn tất cả sự trợ giúp. Bất kỳ nhận xét đánh giá nào cũng sẽ được đánh giá cao! Chúc mừng
quên dấu chấm phẩy trên 'var newRover = {}' và trên tất cả các định nghĩa chức năng của bạn. – philfreo
cảm ơn. Sẽ thực hiện thay đổi đó. :) – Priyank
việc thêm dấu chấm phẩy sẽ không giải quyết được vấn đề mặc dù – Priyank