Object.defineProperty là những gì bạn muốn.
Ví dụ:
var obj = {};
Object.defineProperty(obj, 'key', {
enumerable: false,
configurable: false,
writable: false,
value: 'static'
});
Wil định nghĩa "obj.key" với giá trị: "tĩnh" và nó sẽ chỉ đọc.
- Có nghĩa là số sẽ hiển thị (hoặc không) khi liệt kê các thuộc tính của đối tượng.
- Có nghĩa là có thể ghi nếu bạn muốn nó chỉ đọc, bạn nói sai. không thể ghi.
- Có thể định cấu hình sai nếu bạn không muốn nó có thể bị xóa khỏi đối tượng.
Về bản chất, bằng cách đặt tất cả chúng thành sai, bạn đang tạo các hằng số trên đối tượng. Btw, giá trị mặc định của chúng là sai.
Vì vậy, hiệu quả làm việc này:
Object.defineProperty(obj, 'property', { value: 'value'});
Sẽ tạo ra một hằng số trên 'obj' gọi là 'tài sản' với 'giá trị' giá trị. Hoặc bạn có thể làm điều này
function setConstant(obj, key, value)
{
Object.defineProperty(obj, key, {value: value });
}
var obj = {};
setConstant(obj, "constantName", "constantValue");
Làm cho nó dễ đọc.
có cách tương thích trình duyệt chéo duy nhất để xác định một loại hằng số là sử dụng các bao đóng và cung cấp các phương thức để truy cập biến đó (như thể nó có biến riêng ...). Nhưng vấn đề của tôi là cung cấp cho người dùng nhà phát triển để nhận giá trị từ một hằng số dưới dạng obj.MY_CONSTANT để giải pháp sau của bạn không phù hợp. Vì vậy, cuối cùng, cho rằng (IE cũng là 8 vers.) Trình duyệt khủng khiếp và không tương thích, chúng tôi phát triển luôn phải tìm giải pháp kém và lãng phí thời gian của chúng tôi. Khi M $ hiểu rằng nhà phát triển web muốn TIÊU CHUẨN ????? – xdevel2000
Tôi thường sẽ không phản đối khi ai đó muốn khiếu nại về M $ và tiêu chuẩn, nhưng trong trường hợp này có vẻ không công bằng vì hằng số javascript không phải là một phần của bất kỳ đặc tả nào, chúng là Mozilla cụ thể. – Prestaul
Có, nhưng tôi đã liên quan đến 'chuẩn de facto' và const, __defineGetter__, v.v. được hỗ trợ cho ví dụ: bởi công cụ webKit (Chrome, v.v.). Ngoài ra đối tượng XMLHttpRequest không phải là một tiêu chuẩn w3C (nó được phát minh bởi M $) nhưng nó đã được chấp nhận bởi tất cả. – xdevel2000