2012-04-17 19 views
14

Tôi đọc ở đâu đó sử dụng prototype để mở rộng đối tượng gốc (String, Number, Array, v.v.) là một ý tưởng tồi. Điều này có đúng không? Tại sao hay tại sao không?Đang sử dụng Prototype để mở rộng đối tượng gốc có bị hỏng không?

+9

Đây là câu hỏi hoàn toàn hợp lệ về một số giá trị, imo. Nó không nên đóng lại. –

+0

http://stackoverflow.com/faq#dontask nói rằng nó không phải là. – vascowhite

+0

Về cơ bản, một dup http://stackoverflow.com/questions/8859828/javascript-what-dangers-are-in-extending-array-prototype/8859941#8859941 –

Trả lời

6

Tôi không nghĩ nó xấu. Nếu bạn có một cái nhìn về Ruby on Rails, rất nhiều đối tượng bản địa được mở rộng với chức năng tùy chỉnh và đó là một khung công tác rất tốt.

Điều gì sẽ là xấu nếu bạn thay đổi phương thức hiện có trên đối tượng gốc. điều này có thể gây hậu quả không tốt.

+0

Ah, được rồi. Vâng, điều đó sẽ có ý nghĩa. –

1

Tôi sẽ tránh việc mở rộng/sửa đổi hành vi của các đối tượng gốc.

Ít nhất cũng có ý nghĩa khi phát triển trong môi trường nhóm. Đơn giản chỉ vì, vài tháng sau, một nhà phát triển khác viết một đoạn mã độc lập khác sẽ không nhận ra hành vi đã thay đổi trừ khi được ghi lại ở đâu đó và nhận thức được nó trước khi bắt đầu nhiệm vụ của mình.

Thay vào đó, tôi đề xuất đóng gói/"không gian tên" - tất cả các chức năng như vậy để ai đó có thể chọn hoặc không sử dụng các chức năng đã sửa đổi.

Ngoài ra, các đối tượng gốc và các phương pháp của chúng được kiểm tra kỹ lưỡng cho các trường hợp khác nhau. Vì vậy, bạn sẽ phải hoàn toàn chắc chắn về những gì bạn đang làm trước khi sửa đổi chức năng gốc.

5

Có một cuộc thảo luận tuyệt vời về điều này trong video này từ JSConf 2011 của Andrew Dupont. http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542

Về cơ bản các điểm là:

  • Đừng mở rộng Object.prototype
  • Một số người có thể muốn mở rộng sự vật, một số người không
  • Bạn cần phải biết những gì bạn đang làm
  • Không sử dụng hai thư viện mở rộng mọi thứ, bởi vì nó có thể xấu
  • Mở rộng các mẫu thử để thêm chức năng tiêu chuẩn hầu như luôn ổn.
Các vấn đề liên quan