2012-04-17 45 views
5

Tôi tạo ra đối tượng này và đó là thuộc tính:Tại sao vòng lặp của tôi không hoạt động trên các thuộc tính Javascript của tôi?

var obj = {}; 

Object.defineProperty(obj, "value", { 
    value: true, 
    writable: false, 
    enumerable: true, 
    configurable: true 
}); 

var name = "John"; 

Object.defineProperty(obj, "name", { 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

Vì vậy, sau đó tôi gọi là một vòng lặp for trên chúng:

for (var prop in obj) { 
    console.log(prop); 
} 

nào theo hướng dẫn của tôi, nên tạo ra kết quả như sau:

value 
name 

Nhưng thay vào đó, nó chỉ hiển thị giá trị. Tại sao tên không hiển thị?

+0

Vui lòng chấp nhận một trong các câu trả lời được giải quyết vấn đề của bạn. Điều này giúp người dùng khác trong tương lai khi họ đối mặt với vấn đề này .. :) –

Trả lời

6

Giá trị mặc định cho enumerable trong definePropertyfalse; thuộc tính không thể đếm được không hiển thị trong các vòng for…in. (Đó là toàn bộ điểm của cờ enumerable.) Nếu bạn thêm enumerable:true vào định nghĩa thứ hai của bạn, nó sẽ 'sửa' nó.

Xem some docs.

5

Bởi vì sở hữu tên không được định nghĩa như đếm được, đưa ra định nghĩa tên để

Object.defineProperty(obj, "name", { 
    enumerable: true, 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

và nó sẽ hiển thị.

Các vấn đề liên quan