2010-08-03 21 views

Trả lời

14

Math là đối tượng tích hợp có thuộc tính được gắn cờ không thể đếm được. Nhiều đối tượng dựng sẵn có hành vi này, đó là lý do tại sao lặp qua một mảng với for..in sẽ không cung cấp cho bạn các vấn đề cho đến khi Array.prototype được mở rộng với các hàm người dùng, luôn được liệt kê theo mặc định.

Cho đến gần đây không thể đếm được là thuộc tính nội bộ không thể truy cập bằng mã Javascript thông thường. Tuy nhiên EMCAScript 5 chỉ định khả năng thiết lập tính khả dụng và khả năng ghi (thử thay đổi giá trị Math.PI) của bất kỳ thuộc tính đối tượng nào thông qua Object.defineProperty().

Nó cũng cung cấp Object.getOwnPropertyNames() như một cách để có được danh sách tất cả các thuộc tính của đối tượng bất kể tính khả dụng của chúng.

Object.getOwnPropertyNames(Math); 

//returns 
["LN10", "PI", "E", "LOG10E", "SQRT2", "LOG2E", "SQRT1_2", "LN2", "cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"] 

Viễn như tôi biết các trình duyệt duy nhất hiện hỗ trợ các chức năng này là Chrome và Safari. Firefox nên hỗ trợ nó ở phiên bản 4. IE9 Tôi không chắc chắn về, nhưng Microsoft đã tuyên bố rằng họ có ý định hỗ trợ tiêu chuẩn EMCAScript 5 cuối cùng.

Tôi không tin rằng có bất kỳ cách nào để mô phỏng chức năng này trong phiên dịch Javascript mà không cần hỗ trợ rõ ràng.

5

Giống như hầu hết các đối tượng có sẵn trong JavaScript, thuộc tính và phương thức của đối tượng Math được xác định trong thông số ECMAScript (phần 15.8.1) vì không được đếm thông qua thuộc tính (không thể tiếp cận với tập lệnh) DontEnum. Trong ECMAScript 5, bạn có thể đánh dấu các thuộc tính và phương thức của các đối tượng của riêng bạn cũng không phải là số cũng:

var o = {}; 

Object.defineProperty(o, "p", { 
    enumerable: false, 
    value: 1 
}); 

Object.defineProperty(o, "q", { 
    enumerable: true, 
    value: 2 
}); 

for (var i in o) { 
    console.log(i + "=>" + o[i]); 
} 
// q=>2 
+1

Tôi tự hỏi tại sao ... – You

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