JavaScript и __proto__ - какие браузеры его используют? - PullRequest
16 голосов
/ 21 июня 2010

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

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

Ответы [ 4 ]

8 голосов
/ 21 июня 2010

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

Подробности

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

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

  </head>
</html>

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

7 голосов
/ 21 июня 2010

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

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

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

Те, кто исключен:

  • IE 6, 7, 8
  • Opera
3 голосов
/ 21 июня 2010

Конец предложенного вами предложения - 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;  
}
0 голосов
/ 26 сентября 2013

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

...