2012-04-21 31 views
10

Tôi đã tự hỏi làm thế nào các đối tượng được thực hiện dưới mui xe trong các công cụ Javascript (V8, Spidermonkey, vv). Họ thực sự chỉ là Bảng băm? Nếu vậy, làm thế nào để họ xử lý va chạm?Dưới mui xe, là các bảng băm đối tượng Javascript?

+1

Xem câu trả lời này http://stackoverflow.com/a/6602088/8338 –

+0

bản sao có thể có của [JavaScript VM triển khai quyền truy cập thuộc tính đối tượng như thế nào? Có phải Hashtable?] (Http://stackoverflow.com/questions/6586670/how-does-javascript-vm-implements-object-property-access-is-it-hashtable) – Newtang

Trả lời

5

Trước hết, câu trả lời có thể hơi khác với các công cụ JS khác nhau. Ngoài ra, tôi giả sử bạn đang yêu cầu cụ thể về việc lưu trữ thuộc tính; rõ ràng các đối tượng có một bó của nhà nước khác quá (liên kết chuỗi nguyên mẫu là một rõ ràng). Trong trường hợp Spidermonkey, các đối tượng về cơ bản có một danh sách liên kết các cặp (propname, infromation about property), cho đến khi chúng có quá nhiều thuộc tính, khi tôi tin rằng chúng vẫn giữ danh sách liên kết (vì thứ tự quan trọng đối với các thuộc tính trong JS). trong thực tế) nhưng thêm một hashtable ngoài băng mà ánh xạ các tên thuộc tính cho các mục trong danh sách liên kết.

Cũng có thể có các lý do khác để chuyển sang thẻ bắt đầu bằng #; các chi tiết chưa chính xác được cố định theo thời gian và có thể sẽ thay đổi trong tương lai.

Danh sách liên kết và hashtables thực sự được chia sẻ trên các đối tượng; miễn là hai đối tượng có cùng tên thuộc tính và thông tin thuộc tính corresonding (không bao gồm giá trị, cho thuộc tính có giá trị được lưu trữ) và thuộc tính được đặt theo cùng thứ tự, chúng có thể chia sẻ danh sách liên kết thuộc tính.

Giá trị thuộc tính thực, khi được lưu trữ, được lưu trong một mảng trong đối tượng (hoặc chính xác hơn, hai mảng; một mảng được gán nội tuyến với đối tượng có kích thước cố định tại thời điểm tạo đối tượng, một được phân bổ động và thay đổi kích thước khi cần thiết cho các thuộc tính được thêm vào sau).

-1

Có chúng là các bảng băm. Tuy nhiên, tôi không hiểu phần va chạm của bạn, vui lòng giải thích phần thứ hai của câu hỏi của bạn

+3

Hàm băm có thể trả về cùng một khóa cho đầu vào khác nhau, được gọi là va chạm. – stewe

+4

Các đối tượng JS là _conceptually_ hashtables. Việc triển khai thực tế không phải là một hashtable, và thường là không. –

+1

Đối với v8 và spidermonkey, chúng là – kishu27

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