Подтвердить что ты не робот

JavaScript и __proto__ - какие браузеры используют его?

Какие веб-браузеры используют __proto__? Состояние Mozilla:

Обратите внимание, что __proto__ может быть недоступен в версиях JavaScript, отличных от версии в Mozilla.

4b9b3361

Ответ 1

Нажмите здесь для вашего ответа.

Подробнее

Самый общий способ - проверить эту страницу в разных браузерах:

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

  </head>
</html>

Сообщает, поддерживает ли браузер __proto__. Я отправил его browsershots.org, который создаст скриншоты страницы во многих разных браузерах. Таким образом, вы должны увидеть - с помощью предупреждающего сообщения - какой браузер его поддерживает.

Ответ 2

Руководство по безопасности браузера содержит таблицу, показывающую, какие браузеры выставляют __proto__.

В настоящее время эти браузеры:

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

Те, кого исключили:

  • IE 6, 7, 8
  • Opera

Ответ 3

Конец отправленного вами предложения See below for workarounds., где обсуждается альтернативный метод extends(), который использует 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;  
}

Ответ 4

Это не прямой ответ на вопрос, но он может помочь тем, кто хочет знать прототип экземпляра объекта (это то, что часто используется __proto__). Все современные браузеры (включая IE9) поддерживают getPrototypeOf(), которые могут быть использованы для определения прототипа объекта. Ирония судьбы заключается в том, что некоторые по-прежнему фактические браузеры, такие как IE7 и IE8, которые не поддерживают Object.getPrototypeOf(obj), также не поддерживают obj.__proto__. Для этих браузеров вы можете использовать obj.constructor.prototype. Однако это немного опасно, потому что это свойство можно переопределить.