2010-06-21 31 views
16

Trình duyệt web nào sử dụng __proto__? Mozilla states rằng:JavaScript và __proto__ - trình duyệt nào sử dụng nó?

Lưu ý rằng __proto__ có thể không có sẵn trong các phiên bản JavaScript khác với Mozilla.

+0

Bạn có thể đính kèm '__proto__' vào phần sau' \ '' để định dạng. –

+5

StackOverflow định dạng chỉ sucks nếu bạn không dành thời gian để hiểu nó hoạt động như thế nào. – deceze

+0

Không có phím backticks trên bàn phím azerty FWIW –

Trả lời

8

Bấm here cho câu trả lời của bạn.

Chi tiết

Cách chung nhất là nên kiểm tra trang này trong trình duyệt khác nhau:

<html> 
    <head> 
    <script type="text/javascript"> 
     function a() {} 
     if ((new a).__proto__ === a.prototype) 
      alert('supported'); 
    </script> 

    </head> 
</html> 

Nó cảnh báo nếu một trình duyệt hỗ trợ __proto__. Tôi đã gửi nó đến browsershots.org, điều này sẽ tạo ảnh chụp màn hình của trang trong nhiều trình duyệt khác nhau. Vì vậy, bạn sẽ thấy - bằng phương tiện của thông điệp cảnh báo - trình duyệt nào hỗ trợ nó.

+1

Cảm ơn bạn!Tóm lại, nó không hoạt động trên IE, Safari <5 và Opera <10.50. – Tower

+7

Liên kết không còn hoạt động nữa. Có ai biết về IE9 không? – Dave

+0

Tôi vừa thử nghiệm điều này trong IE9 và IE10. Nó không hoạt động trong IE9, nhưng hoạt động trong IE10. – kzh

3

Sự kết thúc của câu bạn được đăng là See below for workarounds., nơi có một cuộc thảo luận về một phương pháp khác extends() sử dụng super.prototype:

function extend(child, super){ 
    for (var property in super.prototype) { 
    if (typeof child.prototype[property] == "undefined") 
     child.prototype[property] = super.prototype[property]; 
    } 
    return child; 
} 
+0

Tôi biết, nhưng tôi muốn biết những trình duyệt web nào đang hỗ trợ '__proto__'. Tùy thuộc vào câu trả lời, tôi thậm chí có thể không cần loại chức năng đó. – Tower

+2

Tôi không hiểu tại sao bạn nên sao chép các thuộc tính từ một đối tượng này sang đối tượng khác ... Điều này đánh bại mục đích của sự thừa kế nguyên mẫu mạnh mẽ được xây dựng trong JS. – Marius

7

Các Browser Security Handbook có một bảng hiển thị mà trình duyệt lộ __proto__.

Hiện nay, những trình duyệt là:

  • Firefox 2
  • Firefox 3
  • Safari
  • Chrome
  • Android

Những loại trừ:

  • IE 6, 7, 8
  • Opera
0

Đây không phải là câu trả lời trực tiếp cho câu hỏi nhưng nó có thể giúp cho những ai muốn biết nguyên mẫu của cá thể đối tượng (điều này là dành cho những gì __proto__ thường được sử dụng). Tất cả các trình duyệt hiện đại (bao gồm IE9) đều hỗ trợ getPrototypeOf() có thể được sử dụng để xác định nguyên mẫu của đối tượng. Sự trớ trêu của số phận là một số trình duyệt vẫn còn thực tế như IE7 và IE8 không hỗ trợ Object.getPrototypeOf(obj) cũng không hỗ trợ obj.__proto__. Đối với những trình duyệt đó, bạn có thể sử dụng obj.constructor.prototype. Tuy nhiên nó là một chút nguy hiểm vì tài sản này có thể được định nghĩa lại.

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