2013-03-18 37 views
7

Tôi đã phát triển một thư viện Javascript yêu cầu phương thức bind. Thật không may, bind không được IE8 hỗ trợ.Có rủi ro liên quan đến việc sử dụng polyfill ràng buộc MDN không?

Có một polyfill on the MDN website hoạt động tốt.

Câu hỏi của tôi là: Có vấn đề hoặc có thể không tương thích giữa polyfill này và các thư viện Javascript khác không?

Bạn có thể sử dụng an toàn trong mọi trường hợp không?

+0

bạn đã thử mã tương thích mà họ cung cấp trên trang MDN? https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind – Sebas

+0

Có, và nó có vẻ hoạt động tốt. Nhưng tôi có thể chắc chắn rằng nó là trường hợp trong bất kỳ hoàn cảnh nào? – BAK

+0

Không phải bất kỳ hoàn cảnh nào, nhưng phần lớn. – backdesk

Trả lời

6

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Compatibility

Đối với tôi sự khác biệt rõ ràng nhất với mẹ đẻ bind là:

  • arguments.caller không trỏ đến người gọi chức năng ràng buộc, nhưng bạn không nên sử dụng nó anyway
  • length của ràng buộc chức năng được đặt thành 0, điều này có thể ảnh hưởng đến kiểm tra tính năng kiểm tra trạng thái như https://github.com/fitzgen/wu.js/blob/master/lib/wu.js#L406

IMHO nếu bạn chỉ sử dụng "những phần tốt" của JavaScript, và không phát triển cốt lõi của một số khung công tác (đối với IE8?), Bạn không nên gặp phải bất kỳ vấn đề nào với polyfill này.

2

Câu trả lời là khá nhiều có trên trang MDN bản thân:

"Nếu bạn chọn sử dụng thực hiện phần này, bạn phải không phụ thuộc vào những trường hợp hành vi lệch khỏi ECMA-262, 5th edition Với một số tuy nhiên, cần chú ý (và có lẽ với sửa đổi bổ sung cho phù hợp với nhu cầu cụ thể), việc thực hiện một phần này có thể là một cầu nối hợp lý cho đến khi ràng buộc() được triển khai rộng rãi theo đặc tả. "

Không có gì sai với MDN shim như vậy. Tuy nhiên, nếu bạn chọn sử dụng shim của mình, hãy đảm bảo rằng nó không thể bị ghi đè bởi các thư viện khác. Tôi đã có một vấn đề trong khi trước đây với Strophe làm điều đó và thay thế một shim với nhau.

Tôi có xu hướng sử dụng gạch dưới để bao gồm các nội dung như thế này nhưng có các tùy chọn khác như es5shim. Với dấu gạch dưới, bạn có một phương thức được gọi là (bạn đoán nó) '. Liên kết' và hoạt động hơi khác với shim của MDN (sử dụng lời gọi 'mới'). Dấu gạch dưới cũng có một phương pháp tuyệt vời được gọi là ' .partial' có thể hữu ích trong các tình huống mà bạn không muốn thay đổi giá trị của 'this' nhưng một phần áp dụng đối số.

Điểm tôi đang làm ở đây là thay vì cắt xén, có thể xem một thứ được bảo vệ/đóng gói trong thư viện. Cơ hội là bạn sẽ cần nhiều hơn một shim trong mọi trường hợp nếu bạn đang nhắm mục tiêu các trình duyệt như IE8.

Cuối cùng, và không quá quan trọng kiểm tra các bài kiểm tra hiệu suất tại địa chỉ: http://jsperf.com/browser-vs-es5-shim-vs-mdn-shim

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